Erhalten Sie eine Liste der vorhandenen Transienten

Ich habe Transienten sehr oft in WordPress verwendet, seit ich sie entdeckt habe. Um jedoch zu gewährleisten, dass meine Websites korrekt aktualisiert werden, wenn ein Beitrag bearbeitet oder erstellt wird, habe ich eine function zum Löschen von Transienten nach dem Speichern hinzugefügt.

Das funktioniert großartig, aber ich muss eine Liste aller Transienten, die ich auf der Site erstelle, aufführen und dann jede in meiner function namentlich erwähnen.

Dies ist besonders problematisch, wenn ich die Transienten automatisch benenne, zum Beispiel werden einige Transienten basierend auf ihrem Posttitel benannt.

Gibt es in WordPress eine Möglichkeit, eine Liste aller Transienten zu erhalten, die derzeit auf der Site erstellt werden? Ich möchte sie alle auf Postsave löschen. Ich möchte dies tun, ohne zu vermeiden, dass die databaseeinträge direkt gelöscht werden (dh ich möchte die function delete_transient () verwenden, anstatt alle Transienten direkt in der database zu löschen).

Solutions Collecting From Web of "Erhalten Sie eine Liste der vorhandenen Transienten"

Die databaseabfrage würde so aussehen:

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

Verwenden Sie eine function wie diese, um die Ergebnisse nach ihrer function (Site-Transienten, Timeouts) zu sortieren:

 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 '
$transients = ' . esc_html( var_export( $transients, TRUE ) ) . '

'; });

Jetzt erhalten Sie ein Array, getrennt durch die transienten functionen mit unserialisierten Werten.

Beispielausgabe:

 $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://img.daswordpress.com/transient/opera.png', 'img_src_ssl' => 'http://img.daswordpress.com/transient/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://img.daswordpress.com/transient/firefox.png', 'img_src_ssl' => 'http://img.daswordpress.com/transient/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', ), ) 

Sie können die database für alle Transienten abfragen, indem Sie Folgendes verwenden:

 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_%'" ); 

Oder Sie können dieses Plugin installieren.

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

Sie können die class wpdb , um eine Abfrage in DB zu wpdb , um diese Information zu erhalten:

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

BEARBEITEN: Verwenden Sie die prepare () -Methode, wenn Sie eine Abfrage in der database über wpdb vornehmen möchten

Wenn Sie keine Liste verwalten, gibt es keine Liste. Core verwendet auch Transienten, Sie benötigen also eine Möglichkeit, Ihre eigenen zu identifizieren, mit einer Art eindeutiger Präfix. Sie könnten sie dann alle mit einer SQL-Abfrage löschen, wie:

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

Ich kann nicht sagen, ob das wirklich eine gute Idee ist. Sie können sie alle sicher löschen und den core und all Ihre Plugins zwingen, ihre Transienten neu zu erstellen, aber das könnte eine schwere Last sein, abhängig davon, was bei der Erstellung dieser Plugins involviert war.