Intereting Posts
500 Внутренняя ошибка сервера при попытке сохранить меню Как фильтровать URL-адрес при отправке сообщений? Разбиение на страницы для пользовательского магазина петли woocommerce Почему я не могу изменить постоянную ссылку на эту страницу? Сортировка пользовательских типов сообщений по фамилии в бэкэнд Форма комментария не отображается без комментариев Как перенаправить 'url файла' в 'post url', то есть в attachment.php Лучший способ создать меню из 500 пунктов получить персонализированный тип сообщения Темы поддержки WordPress.org, возвращающиеся 404 проблемы безопасности при использовании html data- * attribute для l10n? Пользовательский WP отключает ссылку активации электронной почты, отправленную по электронной почте пользователя. Синхронизация полей профиля BuddyPress и WordPress удалять название категории на страницах Как получить название настраиваемого поля?

Обнаружить изменение в site_url и home_url

Есть ли простой способ проверить, обновлен ли URL-адрес сайта или домашний URL-адрес? Я ищу крючок, который я могу включить.

У меня есть криптографическая функция, которая должна запускаться только один раз, потому что ее вычислить дорого. Этот расчет можно кэшировать до тех пор, пока значение URL-адреса сайта не изменится.

Спасибо за помощь !

Вариант 1 – сохранить резервную копию site_url и home_url

Если вы хотите, чтобы всякий раз, когда изменяются параметры site_url или home_url (страница настроек, wp-config.php, functions.php, …), единственный способ получить это – сохранить некоторые дополнительные параметры в базе данных с этими URL-адресами, чтобы всякий раз, когда сайт открывается, вы должны проверить, были ли они изменены:

function check_siteurl_changes() { $home_url = home_url(); $saved_home_url = get_option('saved_home_url'); $site_url = site_url(); $saved_site_url = get_option('saved_site_url'); if( $saved_home_url !== $home_url || $saved_site_url !== $site_url ) { update_option( 'saved_home_url', $home_url ); update_option( 'saved_site_url', $site_url ); // do something } } add_action( 'init', 'check_siteurl_changes' ); 

Вариант 2 – использовать фильтр pre_update_option_ (option_name) (не распространяется на все варианты использования)

Вы можете использовать привязку фильтра pre_update_option_ (option_name) . Этот фильтр применяется перед сохранением определенной опции в базе данных. Это будет определять только если вы измените эти URL-адреса на странице настроек или с помощью update_option ().

Чтобы также определить, добавляете WP_HOME и WP_SITEURL к wp-config.php, вам нужно будет проверить, определены ли эти константы и сравнить их напрямую с базой данных.

Однако вы не сможете обнаружить, если вы изменяете URL-адреса непосредственно в базе данных или используете update_option (on functions.php) с более высоким приоритетом, чем ваша функция.

 function check_siteurl_changes( $new_value, $old_value ) { if( $new_value != $old_value ) { // do something } return $new_value; } // check if changed on settings page add_filter( 'pre_update_option_siteurl', 'check_siteurl_changes', 1, 2 ); add_filter( 'pre_update_option_home', 'check_siteurl_changes', 1, 2 ); function myplugin_init() { global $wpdb; // check if changed on wp-config with WP_HOME and WP_SITEURL constants but this would be triggered everytime while the constant is defined on wp-config if ( defined('WP_HOME') && '' != WP_HOME ) { $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", 'home' ) ); $home = $row->option_value; check_siteurl_changes( WP_HOME, $home ); } if ( defined('WP_SITEURL') && '' != WP_SITEURL ) { $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", 'siteurl' ) ); $siteurl = $row->option_value; check_siteurl_changes( WP_SITEURL, $siteurl ); } } add_action( 'init', 'myplugin_init' );