检测site_url和home_url中的更改

时间:2017-06-28 作者:LumberHack

是否有一种简单的方法可以检查站点url或主页url是否已更新?我在找一个我最好能插进去的钩子。

我有一个加密函数,只需要运行一次,因为它的计算代价很高。只要站点url的值不变,就可以缓存此计算。

谢谢你的帮助!

1 个回复
最合适的回答,由SO网友:dbeja 整理而成

选项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\' );

结束

相关推荐

Encryption of Wordpress Posts

我一直在寻找一个完全私有的Wordpress博客,并在这一过程中找到了有用的博客/教程,如David Hewsons pretty detailed walkthrough.我目前有一个很好的私有系统(在线),需要登录凭据才能访问博客,现在问题就出在这里。我担心,如果我的web服务器遭到某种方式的黑客攻击(我不会不知道这可能会发生),并且我的数据库被访问,那么我的所有帖子都会被查看,从而破坏所有前端的隐私工作。我一直在寻找预构建的解决方案来加密帖子本身,但目前还不存在任何解决方案,我需要的是在编写Word