选项1-如果要在站点url或主页url更改时进行检测,请保存站点url和主页url的备份(设置页,wp-config.php,functions.php,…)获取该URL的唯一方法是使用这些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\\u update\\u Option\\u(Option\\u name)过滤器(不包括所有用例)您可以使用
pre_update_option_(option_name) 过滤器挂钩。在将某个选项保存到数据库之前应用此筛选器。这将仅检测您是否在设置页面或使用update\\u option()更改这些URL。
还可以检测是否将WP\\u HOME和WP\\u SITEURL添加到WP config。php您需要检查这些常量是否已定义,并直接与数据库进行比较。
但是,您无法检测是否直接在数据库上更改URL,或者是否使用比函数优先级更高的update\\u选项(在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\' );