让WordPress根据条件决定要使用的模板和页面

时间:2017-06-20 作者:Nori

我真的不知道该怎么问/该问什么,但我会尽力。。。

我可以告诉Wordpress(可能在index.php文件中):

如果A 然后加载page Y 与他匹配的模板(你总是很清楚它是什么),如果B 负载page Y 与他匹配的模板(哪个?

我的意思是可能会根据我的情况设置头版。。。然后让wordpress设置查询和正确的模板以及所有内容。

Another way to say it is:

我想告诉Wordpress:你知道,如果我(通过管理设置->阅读面板)将首页设置为标题为“page1”的页面,你会在首页显示它,处理页面数据、模板和主url上需要的所有内容。现在,我希望您也这样做,但是如果发生了什么事情(假设用户已登录,或者无论运行何种类型的和“如果”条件),请使用另一个标题为“page13”的页面进行操作,如果发生了另一件事,请使用另一个标题为“page5”的页面进行操作。。。

2 个回复
SO网友:Picard

要覆盖默认模板,可以使用template_include 钩子,可以这样使用:

add_filter(\'template_include\', \'my_custom_template\');
function my_custom_template($original_template) {

    if ($something) {
        return include_wordpress_template(get_template_directory() . $my_custom_template);
    } else {
        return $original_template;
    }
}
你可以找到更多关于钩子的信息here.

UPDATE

要更改检索到的数据,可以使用pre_get_posts 像这样钩住它:

function my_pre_get_posts($query) {
    global $post;

    if ($query->is_main_query() && $your_condition) {
        $query->set( \'post_type\', \'your_post_type\' );
        $query->set( \'p\', $some_special_id );
    } else {
       return $query;
    }
}
add_action( \'pre_get_posts\', \'my_pre_get_posts\' );

SO网友:Nori

我不确定这是不是一个好方法,但目前这就是我所拥有的:

将WordPress中的首页设置设置为posts,而不是static page,因此WordPress将使用index.php 文件

中的index.php 文件写入:

if (something) {
    global $post;
    $post = get_post( "the post id" );
    setup_postdata( $post );
    include(\'page-template-file.php\');
}
else {
    global $post;
    $post = get_post( "the other post id" );
    setup_postdata( $post );
    include(\'page-other-template-file.php\');
}
注意:您必须使用单数处理其他页面。php模板等等。。。否则,使用此解决方案,您将为站点上的任何页面加载其中一个页面。

结束

相关推荐

FrontPage管理栏消失

我在一个多站点网络上。最近,我的frontpage管理栏消失了,但仍在后端显示。我禁用了所有插件,将主题也更改为210和212,但没有成功。但当我将插件文件夹的名称更改为其他名称时,它开始显示,但当我在不更改插件文件夹名称的情况下停用所有插件时,它不会显示。我认为网络禁用所有插件和/或更改插件文件夹名称是同一回事,所以它应该通过两种方式工作。但管理栏只显示当我将插件文件夹名称更改为其他名称时,而不是通过禁用网络范围内的所有插件。请尽快帮助。