如何覆盖一个帖子并使其显示另一个帖子的内容?

时间:2011-12-08 作者:cwd

我的Wordpress网站上有两个页面:

mysite.com/?p=100
mysite.com/?p=200
我想我应该能够在某处连接到Wordpress的操作并重新查询该帖子,以便mysite.com/?p=200 将显示在页面上mysite.com/?p=100

根据第一个答案的反馈,我认为需要如下所示:

add_action( \'pre_get_posts\', \'wpse35832_pre_get_posts\' );   

function wpse35832_pre_get_posts( $query ){

    $pid = \'\';

    if( ! empty( $query->query_vars[\'page_id\'] ) )
    {
        $pid = $query->query_vars[\'page_id\'];
    }
    elseif( ! empty( $query->queried_object->ID ))
    {
        $pid = $query->queried_object->ID;
    }

    if($pid == \'100\'){
        $query->query_vars[\'page_id\'] = 200;
    }

    return $query;

}
实际上,这个函数确实有效——但有一点需要注意:如果我使用的是相当长的永久链接(mysite.com/name-of-page/), 该页面的标题是针对原始帖子的。然而,如果permalinks是查询变量样式,那么一切似乎都正常。

What am I doing wrong, and how can I fix it? 我试过了unset($query->queried_object 因此需要重新查询它,这样做会导致重定向回原始页面。

基本上,我希望呈现的整个网页与其他帖子完全相同,包括标题标签、帖子标题和帖子内容,因此我正在尝试尽早加入,以实现这一点。

我意识到我可以创建一个自定义页面模板,比如post-200.php 在里面使用query_posts 功能和显示内容。但这不是我想要做的。

我承认这在大多数博客上都没有实际意义,但我认为这是可能的,我希望你们能给我一些帮助。

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

pre_get_posts 挂钩应适用于此:

add_action( \'pre_get_posts\', \'wpse35832_pre_get_posts\' );   
function wpse35832_pre_get_posts( $wp ){
    if( $wp->query_vars[\'p\'] == 200 ):
         $wp->query_vars[\'p\'] = 100;
    endif;
    return $wp;
}
如果使用漂亮的永久链接,可能会有一些不同的工作方式,可能会设置不同的查询变量,但不确定。

结束

相关推荐

使jQuery库在插件文件之前加载

我正在使用一些jQuery插件,比如validate。但是它们都是在由WordPress和my theme自动加载的Jquery库之前加载的。我需要在之后加载插件,所以有没有办法让Jquery在函数中首先加载。php-以便我可以使用它的前端和管理。我目前正在函数中加载以下内容。phpwp_enqueue_script(\'validation\', get_bloginfo(\'template_url\') .\"/js/jquery.validate.min.js\"); w