如何根据用户是否登录来有条件地显示不同的主页模板?

时间:2014-04-16 作者:user658182

如何根据用户是否登录,有条件地为主页加载HTML?

目前我的主题有一个索引。php文件。在我试图创建的文件中:

<?php
if(is_user_logged_in()) {
 get_header(); ?>
<div id="primary" class="content-area">
    <div class="primary-inner">
        <div id="content" class="site-content content-list" role="main">
        <?php 
        if ( have_posts() ) : 
            while ( have_posts() ) : the_post(); 
                get_template_part( \'content\', get_post_format() ); 
            endwhile;
            dw_minion_content_nav( \'nav-below\' ); 
        else : 
            get_template_part( \'no-results\', \'index\' ); 
        endif; 
        ?>
        </div>
    </div>
</div>
<?php get_sidebar(\'secondary\'); ?>
<?php get_footer(); ?>
<?php } else { ?>
    // load plain ol\' static boring HTML here with a login widget area.
<?php
} ?>
然而,这不起作用。事实上,无论我在指数上做了什么改变。php文件,没有其他更改。我甚至可以删除该文件,而且效果很好!!

我可以看到我有一个标题。php文件。如果修改该文件,则可以看到出现的更改。但是,这意味着我必须修改它,footer。php,第页。php,内容。php等,最终有多个文件,其中包含条件逻辑。

我是Wordpress的新手。必须有更好的方法才能做到这一点,对吗?

如果此人未登录,则应显示一个完全不同的主页模板/设计,其中有一个小部件区域,其中显示WP登录表单(bp登录小部件)。该用户登录后,将显示带有默认模板的正常主页。

在阅读过程中,设置了一个静态页面,该页面的模板为“默认模板”

3 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

首先检查“阅读设置”中是否没有设置为首页的页面。如果设置了,index.php 不是用作主页,而是设置为首页的页面模板。

在这种情况下,您需要找到该模板并添加条件。

<?php
if(is_user_logged_in()) {
 get_header(); ?>
<div id="primary" class="content-area">
    <div class="primary-inner">
        <div id="content" class="site-content content-list" role="main">
        <?php 
        if ( have_posts() ) : 
            while ( have_posts() ) : the_post(); 
                get_template_part( \'content\', get_post_format() ); 
            endwhile;
            dw_minion_content_nav( \'nav-below\' ); 
        else : 
            get_template_part( \'no-results\', \'index\' ); 
        endif; 
        ?>
        </div>
    </div>
</div>
<?php get_sidebar(\'secondary\'); ?>
<?php get_footer(); ?>
<?php } else { ?>
    YOU CAN CREATE A PAGE TEMPLATE HERE THAT WILL SHOW IF USER IS NOT LOGGED IN
     YOU CAN ALSO ADD A LOGIN WIDGET HERE. 
<?php
} ?>

SO网友:Pim

你可能想看看这个:https://codex.wordpress.org/Template_Hierarchy

您的索引。php通常是Wordpress在加载任何页面时查找的最后一个文件。就主页而言,它将首先查找首页。php然后返回主页。php(如果您的主页设置为显示最新帖子,而不是静态页面)。如果要更改索引。php,但什么都没有发生,那么这意味着在层次结构的更高层使用了另一个模板。

SO网友:Brad Dalton

您可以使用if ( is_user_logged_in() ) { 条件标记并将HTML添加到文本小部件。

也可以创建其他主页模板,并在函数文件中使用以下代码:

add_filter( \'template_include\', \'wpsites_conditional_home_page_template\', 99 );

function wpsites_conditional_home_page_template( $template ) {

    if ( is_user_logged_in() ) {
        $new_template = locate_template( array( \'alt-home-page-template.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template ;
        }
    }

    return $template;
}

结束

相关推荐

custom post on homepage

我如何在buddypress的主页上包含特定类别的帖子?例如,我有一个ID为3的“主页横幅”类别。在管理中,我创建了一个帖子,并将“主页横幅”类别分配给它。然后我需要这个显示在主页上(最新的帖子)。我是WP/BP的新手,非常感谢您的帮助。谢谢