【问题标题】:Widget Logic - display on page and all child小部件逻辑 - 显示在页面和所有子项上
【发布时间】:2017-02-13 11:25:20
【问题描述】:

我对 Widget Logic (wrpdress) 中的条件函数有疑问。 我想在子页面和所有子页面上显示菜单。

我用这个:

global $post; return (in_array(1959,get_post_ancestors($post)));

在这种情况下,它适用于所有子页面,但子页面上没有显示 (1959)。

我也试试:

global $post; return (is_page('Offer') || ($post->post_parent=="1959"));

在这种情况下,它不会显示在更深的孩子身上。

【问题讨论】:

  • 请分享更多代码。并检查wp-content/debug.txt,让我看看你在那里看到了什么。
  • 这就是全部代码。我没有文件 debug.txt。你可以在wordpress.org/plugins/widget-logic/other_notes看到的简单代码
  • 这是一个插件特定的问题。我们不知道插件作者是如何编写代码的。所以,请遵循他们的文档。
  • 好的,但是它是基于 wordpress 条件标签功能的。我遵循 WP 文档,但它不起作用。

标签: php wordpress menu logic


【解决方案1】:

我看到您已经找到了问题的解决方案,但是我想详细说明您最初的尝试为何不起作用以及如何改进代码。

您的第一个 sn-p 将检索所提供页面(帖子对象)的所有祖先页面。如果这些祖先中的任何一个与您定义的页面 ID 匹配,它将返回 true。当前页面没有经过测试,所以如果您在您正在检查的页面上,它仍然会返回 false。

在您的第二次尝试中,您正在检查 post_parent 属性,该属性只为您提供直接父 ID。不包括任何更高级别的页面。

我的解决方案是:

global $post;
$page_id = 1959; // the page ID you want to test against.

return ( is_page( $page_id ) || in_array( $page_id, get_post_ancestors( $post ) ) );

我首先检查is_page() 以避免运行更密集的get_post_ancestors() 函数。我还为页面 ID 使用了一个变量,该变量被传递到两个测试中以避免混淆。

您可以将代码转换为函数以使其可重用。

function wpse_is_page_or_subpage( $page_id ) {
    global $post;
    return ( is_page( $page_id ) || in_array( $page_id, get_post_ancestors( $post ) ) );
}

用法:wpse_is_page_or_subpage( 1959 );

【讨论】:

    【解决方案2】:

    我很喜欢它:

    global $post; return (in_array(1959,get_post_ancestors($post))) || (is_page('Offer'));
    

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2012-02-17
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多