【问题标题】:WordPress ignoring is_page() conditionalWordPress 忽略 is_page() 条件
【发布时间】:2017-05-17 14:58:22
【问题描述】:
<?php if( is_home()  || is_page(10)): ?> 
    <div class="text-center col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<?php elseif(is_single() && !is_page(10)): ?>
    <div class="text-center col-xl-9 col-lg-9 col-md-9 col-xs-12">
<?php endif; ?>

我要做的就是更改分配给此&lt;div&gt; 的课程,如果您在单个帖子上,这工作正常,但在查看联系页面时我无法控制它,这似乎识别为单个帖子。这很好,但我想从这个效果中排除一页。

我尝试过 is_page('Contact')、is_page('contact') 和 is_page(10) 在任何情况下,它们似乎都没有返回 true,我什至删除了所有其他条件,如果它是联系页面,则让它打印一些东西,但它仍然没有返回 true,也没有任何效果。

我已经做了很多搜索,我能找到的所有内容都表明我使用它是正确的。我不知道为什么它不会返回 true?

我是否错误地使用了 php if 语句并且到目前为止它一直是“哎呀,它有效”的场景? 页面的 url 以 ?page_id=10 结尾,页面标题为“Contact”

我可以创建一个页面模板,但它似乎比我需要的更多,联系页面非常简单,我真正需要做的就是使用引导程序适当地将四行文本居中。在网站的所有其他页面上都可以正常工作,如果您在主页上或查看单个帖子,请适当更改 &lt;div&gt;

根据要求,完整的 index.php 代码如下。感谢任何愿意看这个的人。这没什么大不了的,我比较新,所以请原谅我的过度评论 - 我还在学习。 完整 index.php:https://pastebin.com/nnG0ny99

【问题讨论】:

  • 您能否确认您使用的是主页而不是帖子?我只是想确定一下,因为如果它是一个帖子,你需要使用 is_single(10);
  • 这是一个页面,我在word press的“页面”下编辑它。我之前也尝试过 is_single(10) ,只是为了在来这里之前确定一下。它没有预期的效果。 url 以 ?page_id=10 结尾,而不是 ?p=10。
  • 如果可能,请在此处粘贴您的完整代码。

标签: php html wordpress


【解决方案1】:

您可以尝试使用:

global $post;

<?php if( is_home()  || $post->ID == 10): ?> 
<div class="text-center col-xl-12 col-lg-12 col-md-12 col-sm-12 col-xs-12">
<?php elseif(is_singular() && $post->ID != 10): ?>
<div class="text-center col-xl-9 col-lg-9 col-md-9 col-xs-12">
<?php endif; ?>

这样您将获得实际的帖子 ID 而不是页面 ID。

编辑:尝试将 is_single() 更改为 is_singular(),正如 saNs 在他的回答中所建议的那样。

【讨论】:

  • 感谢您的回复。我尝试了您推荐的方法,但它仍然没有相应地更改
    类。当我检查页面时,根据 elseif 语句分配类。
  • @ShaunReed 查看编辑后的答案,尝试将is_single() 更改为is_singular()
  • 仍然没有变化。我用完整的 index.php 更新了帖子,其中包括我的 is_singular() 更改。
  • @ShaunReed 你在single.php 中工作吗?你能做一个 确保您正在处理的文件正在运行?
  • 哈哈,不用担心,我花了相当多的时间在错误的模板文件中工作:)
【解决方案2】:

确保您没有在循环中使用 is_page()。

来自https://developer.wordpress.org/reference/functions/is_page/ “由于某些全局变量在循环期间被覆盖,is_page() 将不起作用。为了在循环之后调用它,您必须先调用 wp_reset_query()。”

【讨论】:

  • 我在您链接的确切页面上看到了同样的信息,我认为它不适用于这种情况。我已经在上面的 Pastebin 中发布了我的完整 index.php,如果我错了,请纠正我。感谢您的帮助
  • 您正确地在循环外发布 is_page() ... 如果您的 Wordpress 主题有一个“page.php”文件,您需要在其中放置代码。它可能不是“page.php”,而是某种页面模板。您可以在此处了解有关模板层次结构的更多信息。如果页面、帖子、类别等没有其他模板,则 Index.php 是万能的developer.wordpress.org/themes/basics/template-hierarchy
【解决方案3】:

is_single() 适用于“除附件和页面外的任何帖子类型”(https://developer.wordpress.org/reference/functions/is_single/),因此对于页面,它始终评估为 false。

请改用is_singular()

【讨论】:

  • 很高兴知道,但没有解决我的问题 :( 不过对我来说是个消息。知道这一点可能会在未来为我省去一些麻烦,感谢您的提醒!
猜你喜欢
相关资源
最近更新 更多
热门标签