重定向页面id url,但不重定向页面块

时间:2021-02-17 作者:Jason

我的客户要求我强制执行404$wp_query->set_404(); 如果URL为example.com/page_id=342 但如果URL为example.com/about 即使它们是同一页。我必须在functions.php 文件,而不是.htaccess.

我尝试过:

add_action(\'init\',\'add_get_val\');
function add_get_val() { 

if (isset($_GET[\'page_id\'])) {
    $param = $_GET[\'page_id\'];
  
    if($param == \'342\') {
         global $wp_query;
           $wp_query->set_404();
           // status_header( 404 );
           // get_template_part( 404 ); 
           // exit();
    }

}

}
目前的代码不起作用。但如果我取消注释status_header(), get_template(), 和exit() 确实如此。然而,它并没有给出相同的404页。

我做错了什么?

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

尝试使用pre_handle_404 hook 而是:

add_filter( \'pre_handle_404\', \'wpse_383506\', 10, 2 );
function wpse_383506( $preempt, $wp_query ) {
    if ( ! empty( $_GET[\'page_id\'] ) &&
        \'342\' === $_GET[\'page_id\']
    ) {
        // Throw a 404 error.
        $wp_query->set_404();

        // And prevent redirect to the page permalink (pretty URL).
        remove_action( \'template_redirect\', \'redirect_canonical\' );
    }

    return $preempt; // always return it
}

相关推荐

Understanding Redirects

我有一个WordPress网站,运行良好。该网站在一个流行的托管网站上共享托管。它已从不同的托管站点迁移/转移到当前的托管站点(提到这一点是因为它可能会在回答这两个问题时发挥作用)。该站点在现有站点上有一个SSL,在原始站点上也有一个SSL。我已经更改了域名注册处的名称服务器,以指向新的托管站点。当我使用sslchecker时。com/sslchecker要分析我的www域,我会发现以下信息:当我使用www.example.com 或https://www.example.com 分析器表示url解析为w