IS_HOME和IS_FROWN_PAGE条件问题

时间:2013-05-16 作者:Alan

我在“portfolio loop.php”文件中有这个片段。我使用get\\u template\\u part在首页和其他页面上显示循环。

我有一个循环:

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time(\'F Y\'); ?></p>
<?php endif } ?>
我似乎无法将其排除在头版之外。可能是因为它在自己的模板中?

edit

好的,多亏s\\u ha\\u dum和Tom Nowell,我修复了一些语义错误。我尝试了以下变化:

<?php if ( !is_home() && !is_front_page() ) { ?> 
    <!--nada -->
<?php } else { ?>
    <p><?php the_time(\'F j, Y\'); ?></p>
<?php } ?>



//dropping is_home() and trying to keep it as simple as possible
<?php if(!is_front_page()) { ?>
    <p><?php the_time(\'F j, Y\'); ?></p>
<?php } ?>
我还是无法在头版上隐藏时间。充其量“<--nada-->\'将出现在我的主页(home.php)和存档(category blog.php)上。我的自定义分类页是否也被视为头版?

edit 2

我想用通俗易懂的英语做什么:

我的首页(static,home.php)上有一个循环,通过get\\u template\\u部分显示了我最近的三篇博客文章。同样的循环用于我的分类博客。php/archive列表,但显示了最后10篇文章。我不想在首页上显示日期/时间以保持布局更清晰,只想在显示此循环的其他页面上显示。

5 个回复
SO网友:s_ha_dum

看看我能不能把自己弄糊涂。

如果你俩中的任何一个OR 条件是true 代码将执行。

is_homeis_front_page 可以返回true 对于不同的页面,在您的案例中为否定。如果有一个静态from页面,听起来像是这样,那么is_home 是博客索引页。

注意:WordPress 2.1处理此功能的方式与以前的版本不同-请参阅静态首页。如果选择静态页面作为frontpage(请参见is\\u front\\u Page()),此标记将应用于“posts Page”。

http://codex.wordpress.org/Function_Reference/is_home

这意味着is_home 将是false 对于除博客索引之外的每个页面,这意味着!is_home 有条件istrue 对于每个页面,除了博客索引页面之外,您的代码几乎会一直运行。

现在,文档is_front_page.

当显示主博客页面且设置->阅读->首页显示设置为“您的最新帖子”时,或当设置为“静态页面”且“首页”值为当前显示的页面时,返回TRUE。

http://codex.wordpress.org/Function_Reference/is_front_page

根据您的设置,有两种可能。它可能会回来true 对于您的博客索引页,或者它可能会返回true 对于静态页面。我认为你有一个静态的头版,所以is_front_page 将返回true 对于该页和!is_front_page 条件将为false。因为!is_home 是(如果我跟踪你的话,可能是)true 代码仍在执行。

如果要排除<p><?php the_time(\'F Y\'); ?></p> 从博客索引和静态首页,然后否定整个OR 声明:

if( !(is_home() || is_front_page()) )
如果其中一个是true 那么整个事情就是false.

如果只想将其从头版中排除,则不需要!is_home 完全是一部分。

如果您使用&& 而不是|| 然后两者is_homeis_front_page 必须是false 让代码运行。也就是说,你不在博客索引上,同时也不在前面。

SO网友:Tom J Nowell

在解决您的主要问题之前,我必须指出一个明显的语法错误:

<?php if( !is_home() || !is_front_page() ) { ?>
  <p><?php the_time(\'F Y\'); ?></p>
<?php endif } ?>
为什么endif 那里这毫无意义,编程中的一切都有目的/理由。你最好把它改成marigolds-potatoe-farm, 这将产生与致命错误相同的效果。所以把它扔掉。

这是基本的if语句:

if ( this statement is true ) {
    do this
} else {
    do that
}
if()有缩写:endif;等等,不要使用这些,它们在现阶段比它们的价值更麻烦。

所有这些都应该被您的编辑器捕获并突出显示。如果不是,那么你使用的是一个不称职的编辑程序。去找一个具有大括号自动补全、PHP linting/语法检查、颜色编码和自动补全功能的编辑器。

示例包括但不限于:

Netbeans,PHPStorm,SublimeText,Komodo编辑,IDE,Eclipse,不要让事情变得太难

继续讨论你的逻辑问题

if( !is_home() || !is_front_page() ) {
这是英文散文吗

如果不是主页,请执行此操作,如果不是首页,也请执行此操作

因此,如果是主页,它就会这样做。如果它是frontpage,它就会这样做。

我相信你的意思是:

如果它既不是主页也不是frontpage,那么就这样做。

即:

if ( !( is_home() || is_front_page() ) ) {
也可以写为:

if ( !is_home() && !is_front_page() ) {
或者更进一步:

if ( !is_home() ) {
    if ( !is_front_page() ) {

所以总结一下

  • 这是基本逻辑
  • 你不需要PHP技能就可以了解基本逻辑,古希腊的人们知道布尔真/假逻辑,一些孩子在学校里做这件事
  • 掌握句号的正确用法将有助于你,因为它演示了在一个单词上移动逗号是如何完全改变意思的,就像移动空格一样&&;或者| |也可以这样做。这都是关于语义的massive 花费的时间和精力You\'re check worked beautifully, it was just checking the wrong thing

SO网友:Chip Bennett

如果目标是这样的:

我不想在首页上显示日期/时间以保持布局更清晰,只想在显示此循环的其他页面上显示。

然后,您应该能够使用一个简单的条件:

<?php if ( ! is_front_page() ) { ?>
    <p><?php the_time(\'F Y\'); ?></p>
<?php } ?>
如果不确切知道您想要完成什么,就不可能提供您所需要的确切的条件语句。也就是说,以下是以下条件,其中一个/或两个is_home()is_front_page() 将为true和/或false。

一般而言is_home()Blog Posts Index 显示在网站首页或指定的静态页面上is_front_page()Site Front PageSite Front Page 设置为显示Blog Posts Index:

  • \'posts\' == get_option( \'show_on_front\' )
  • Both is_home()is_front_page()truefirst page 将显示博客文章索引的Site Front Page, 二者都is_home()is_front_page()true
  • is_home()true, 和is_front_page()false, 在任何其他页面的博客帖子索引的后续页面(即分页显示)上,这两个页面都是falseSite Front Page 设置为显示Static Page:

    • \'page\' == get_option( \'show_on_front\' )
    • is_home()false, 和is_front_page()true, 在Site Front Page (即页面ID=get_option( \'page_on_front\' ) )
    • is_home()true, 和is_front_page()false, 在指定显示Blog Posts Index (即页面ID=get_option( \'page_for_posts\' )
    • Both is_home()is_front_page()false 每隔一页

SO网友:Giraldi

我想is_homeis_front_page 类似于is_page 还有类似的they cannot be used inside The Loop.

至少,我目前的工作是variable 到循环。

所以,作为一个粗略的例子,让我们假设在你的主页上有一个公文包循环。。。可能是下面这句话:

get_template_part( \'loop\', \'portfolio\' );
添加变量prior to that line 并且成功了global 以便以后在循环中使用它,如下所示:

global $hide_time;
$hide_time = true;
get_template_part( \'loop\', \'portfolio\' );
然后,inside your Loop, 您可以使用此变量作为循环的条件:

<?php
global $hide_time;
if( $hide_time != true ) { ?>
    <p><?php the_time(\'F Y\'); ?></p>
<?php } ?>
NOTE: 变量必须为global 在这两个文件中。

SO网友:Brad Dalton

为什么不简单地将代码从模板中取出,然后从子主题函数文件中钩住它,如下所示:

    add_action ( \'your_themes_hook\', \'display_date_exclude_front_page\' );
    function display_date_exclude_front_page() {
if ( !is_front_page() ) {
    echo the_time(\'F Y\');
        }
    }
Note: 不要忘记用主题钩子或WordPress钩子替换\\u themes\\u钩子。

is_front_page 在首页上始终返回true。

is_home() 无论您的帖子页面位于何处,都会返回true。

它可以是使用博客页面模板的任何页面,如果使用默认页面,则可以是首页Reading Settings 否则你就在那里改了。

enter image description here

结束

相关推荐

Remove the_content From Loop

我试图显示一个只有特定元素的自定义循环。“我的循环”当前包含标题、创建日期、作者和;所容纳之物然而,我正在尝试删除循环中每个帖子的内容,因为我不希望它在这个列表中显示得不走运。我甚至已经从循环中删除了\\u content();它仍然会在循环部分下显示帖子内容的列表。任何帮助都将不胜感激,这是我的代码:<?php query_posts(\'category_name=halloween &posts_per_page=6\'); ?> <?php if ( have_p