Подключить действие при удалении переходного процесса? Не могу заставить его работать!

Я работаю над плагином, и при запросе он кэширует удаленную страницу. Файл создается с помощью tempnam (). Я сохраняю путь к этому кэшированному файлу в переходном режиме, используя переходный API .

Как только переходный процесс удаляется WordPress, я хотел бы удалить и мою кэшированную страницу. Я попытался добавить действие на hook deleted_transient , но кажется, что он не уволен. Возможно, этот режим запускается только при использовании delete_transient () , а не когда WP автоматически выполняет задание.

Моя другая проблема заключается в том, что для удаления моего файла мне нужно получить путь к кэшированному файлу ПЕРЕД исчезновением переходного процесса …

… Но удаленный_транзитный крючок запускается после удаления. Есть еще один крючок перед удалением ( 'delete_transient_'. $ Transient ), но … Мне нужно знать, как имя переходного процесса запускает его. И у моего преходящего есть случайные имена …

Есть идеи по этому поводу?

Solutions Collecting From Web of "Подключить действие при удалении переходного процесса? Не могу заставить его работать!"

Переходные процессы обычно очищаются при чтении. Если вы хотите проверить этот общий случай, вы можете поймать pre_transient_transientname и посмотреть, истекло ли это, так же, как работает WP:

function get_transient( $transient ) { /** * Filter the value of an existing transient. * * The dynamic portion of the hook name, `$transient`, refers to the transient name. * * Passing a truthy value to the filter will effectively short-circuit retrieval * of the transient, returning the passed value instead. * * @since 2.8.0 * * @param mixed $pre_transient The default value to return if the transient does not exist. * Any value other than false will short-circuit the retrieval * of the transient, and return the returned value. */ $pre = apply_filters( 'pre_transient_' . $transient, false ); if ( false !== $pre ) return $pre; if ( wp_using_ext_object_cache() ) { $value = wp_cache_get( $transient, 'transient' ); } else { $transient_option = '_transient_' . $transient; if ( ! defined( 'WP_INSTALLING' ) ) { // If option is not in alloptions, it is not autoloaded and thus has a timeout $alloptions = wp_load_alloptions(); if ( !isset( $alloptions[$transient_option] ) ) { $transient_timeout = '_transient_timeout_' . $transient; if ( get_option( $transient_timeout ) < time() ) { delete_option( $transient_option ); delete_option( $transient_timeout ); $value = false; } } } if ( ! isset( $value ) ) $value = get_option( $transient_option ); } /** * Filter an existing transient's value. * * The dynamic portion of the hook name, `$transient`, refers to the transient name. * * @since 2.8.0 * * @param mixed $value Value of transient. */ return apply_filters( 'transient_' . $transient, $value ); } 

Вы также можете подключить фильтр pre_option__transient_timeout_<transientname> чтобы поймать, что get_option выше, что происходит непосредственно перед удалением, и проверить это условие, чтобы узнать, истекло ли это. Просто убедитесь, что вы вернули первый аргумент в функции, которые вы используете для их фильтрации.