Получить список существующих переходных процессов

Я много раз использовал переходные процессы в WordPress, так как обнаружил их, однако, чтобы обеспечить корректное обновление моих сайтов при редактировании или создании сообщения, я добавил функцию для удаления переходных процессов при сохранении сообщения.

Это отлично работает, но мне нужно сохранить список всех переходных процессов, которые я создаю на всем сайте, а затем упомянуть каждый по имени в моей функции.

Это особенно хлопотно, когда я называю переходные процессы автоматически, например, некоторые переходные процессы называются в соответствии с их заголовком.

Есть ли способ в WordPress получить список всех переходных процессов, созданных в настоящее время на сайте? Я хотел бы очистить их все после публикации. Я хотел бы сделать это, избегая прямого удаления записей базы данных (т. Е. Я хотел бы использовать функцию delete_transient (), а не просто удалять все переходные процессы непосредственно в базе данных).

Solutions Collecting From Web of "Получить список существующих переходных процессов"

Запрос db будет выглядеть так:

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

Чтобы отсортировать результаты по их функции (переходные процессы сайта, тайм-ауты), используйте следующую функцию:

 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>'; }); 

Теперь вы получаете массив, разделенный переходными функциями с неэтериализованными значениями.

Пример вывода:

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

Вы можете запросить базу данных для всех переходных процессов, используя что-то вроде:

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

Или вы можете установить этот плагин.

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

Вы можете использовать класс wpdb чтобы сделать запрос в БД, чтобы получить эту информацию:

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

EDIT: используйте метод prepare (), если вы хотите сделать запрос в базе данных через wpdb

Если вы не поддерживаете список, то списка нет. Core также использует переходные процессы, поэтому вам понадобится какой-то способ идентифицировать свой собственный, с каким-то уникальным префиксом. Затем вы можете удалить их с помощью SQL-запроса, например:

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

Я не могу говорить, действительно ли это хорошая идея. Вы можете безопасно удалить их все и заставить ядро ​​и все ваши плагины воссоздать свои переходные процессы, но это может быть тяжелая нагрузка в зависимости от того, что было связано с их созданием.