web-dev-qa-db-fra.com

Obtenir une liste des transitoires existants

J'utilise beaucoup de passagers transitoires dans WordPress depuis que je les ai découverts. Cependant, pour garantir la mise à jour correcte de mes sites lorsqu'un message est modifié ou créé, j'ai ajouté une fonction permettant de supprimer les passagers transitoires lors de l'enregistrement.

Cela fonctionne très bien, mais je dois garder une liste de tous les transitoires que je crée sur le site, puis les nommer par leur nom dans ma fonction.

Cela est particulièrement gênant lorsque je nomme les personnes en transition automatiquement, par exemple, certaines personnes sont nommées en fonction de leur titre.

Existe-t-il un moyen dans WordPress d’obtenir une liste de tous les transitoires actuellement créés sur le site? Je voudrais tous les effacer sur la sauvegarde de poste. J'aimerais faire cela tout en évitant de supprimer directement les entrées de la base de données (par exemple, j'aimerais utiliser la fonction delete_transient () plutôt que de simplement supprimer tous les transitoires directement dans la base de données).

6
Shaun

La requête de base de données ressemblerait à ceci:

SELECT `option_name` AS `name`, `option_value` AS `value`
FROM  $wpdb->options
WHERE `option_name` LIKE '%transient_%'
ORDER BY `option_name`

Pour trier les résultats en fonction de leur fonction (transitoires de site, délais), utilisez une fonction comme celle-ci:

add_action( 'shutdown', function(){

    global $wpdb;
    $sql = "SELECT `option_name` AS `name`, `option_value` AS `value`
            FROM  $wpdb->options
            WHERE `option_name` LIKE '%transient_%'
            ORDER BY `option_name`";

    $results = $wpdb->get_results( $sql );
    $transients = array();

    foreach ( $results as $result )
    {
        if ( 0 === strpos( $result->name, '_site_transient_' ) )
        {
            if ( 0 === strpos( $result->name, '_site_transient_timeout_') )
                $transients['site_transient_timeout'][ $result->name ] = $result->value;
            else
                $transients['site_transient'][ $result->name ] = maybe_unserialize( $result->value );
        }
        else
        {
            if ( 0 === strpos( $result->name, '_transient_timeout_') )
                $transients['transient_timeout'][ $result->name ] = $result->value;
            else
                $transients['transient'][ $result->name ] = maybe_unserialize( $result->value );
        }
    }
    print '<pre>$transients = ' . esc_html( var_export( $transients, TRUE ) ) . '</pre>';
});

Vous obtenez maintenant un tableau, séparé par les fonctions transitoires avec des valeurs non sérialisées.

Exemple de sortie:

$transients = array (
  'site_transient' => 
  array (
    '_site_transient_browser_0f2bbce5647f9c092edea85f1b5d9145' => 
    array (
      'platform' => 'Windows',
      'name' => 'Opera',
      'version' => '12.02',
      'update_url' => 'http://www.opera.com/',
      'img_src' => 'http://s.wordpress.org/images/browsers/opera.png',
      'img_src_ssl' => 'https://wordpress.org/images/browsers/opera.png',
      'current_version' => '11.64',
      'upgrade' => false,
      'insecure' => false,
    ),
    '_site_transient_browser_4155da8a3756e08080a06133476ef1fd' => 
    array (
      'platform' => 'Windows',
      'name' => 'Firefox',
      'version' => '19.0',
      'update_url' => 'http://www.firefox.com/',
      'img_src' => 'http://s.wordpress.org/images/browsers/firefox.png',
      'img_src_ssl' => 'https://wordpress.org/images/browsers/firefox.png',
      'current_version' => '16',
      'upgrade' => false,
      'insecure' => false,
    ),
  ),
  'site_transient_timeout' => 
  array (
    '_site_transient_timeout_browser_0f2bbce5647f9c092edea85f1b5d9145' => '1352809256',
    '_site_transient_timeout_browser_4155da8a3756e08080a06133476ef1fd' => '1366603648',
  ),
  'transient' => 
  array (
    '_transient_feed_mod_46583134dd8a90321b20eb41cdeb134c' => '1366089834',
    '_transient_feed_mod_57bc725ad6568758915363af670fd8bc' => '1352920456',
    '_transient_plugins_delete_result_1' => '1',
  ),
  'transient_timeout' => 
  array (
    '_transient_timeout_feed_46583134dd8a90321b20eb41cdeb134c' => '1366133033',
    '_transient_timeout_feed_57bc725ad6568758915363af670fd8bc' => '1352963656',
  ),
)
6
fuxia

Vous pouvez interroger la base de données pour tous les transitoires en utilisant quelque chose comme:

global $wpdb;

// sorry about format I hate scrollbars in answers.
$your_transients = $wpdb->get_results(
             "SELECT option_name AS name, option_value AS value FROM $wpdb->options 
              WHERE option_name LIKE '_transient_%'"
          );

Ou vous pouvez installer ce plugin.

http://wordpress.org/plugins/debug-bar-transients/

2
Wyck

Vous pouvez utiliser la classe wpdb pour effectuer une requête dans la base de données afin d’obtenir ces informations:

$query = "
SELECT * 
FROM wp_options
WHERE option_name LIKE  '_transient_%'
";

EDIT: utilisez la méthode prepare () si vous choisissez de faire une requête dans la base de données via wpdb

0
JMau

Si vous ne maintenez pas de liste, il n'y en a pas. Le noyau utilise également les transitoires, vous aurez donc besoin d’un moyen d’identifier votre propre conflit, avec une sorte de préfixe unique. Vous pouvez ensuite tous les supprimer avec une requête SQL, comme:

"DELETE FROM $wpdb->options WHERE `option_name` LIKE ('%YOUR-IDENTIFIER%')"

Je ne peux pas vous dire si c'est une bonne idée ou non. Vous pouvez les supprimer tous en toute sécurité et forcer le noyau et tous vos plugins à recréer leurs transitoires, mais cela pourrait être une lourde charge en fonction de ce qui a été impliqué dans leur création.

0
Milo