帖子在派生类别中,未在home.php中工作

时间:2013-09-17 作者:usama sulaiman

我在函数中创建了一个自定义函数。php检查post\\u是否在\\u substant\\u类别中,我通过一个插件控制它,该插件返回true is a post is in substant类别,it is working well

But it\'s not working in my home.php, 奇怪的是,当我检查家中任何帖子的post\\u是否在\\u genderant\\u类别中时。php结果保持为true

I want to know the reason for that and how to fix it

post\\u的我的代码是\\u子体\\u类别中的\\u

if ( ! function_exists( \'post_is_in_descendant_category\' ) ) {
    function post_is_in_descendant_category( $cats, $_post = null ) {
        foreach ( (array) $cats as $cat ) {
            // get_term_children() accepts integer ID only
            $descendants = get_term_children( (int) $cat, \'category\' );
            if ( $descendants && in_category( $descendants, $_post ) )
                return true;
        }
        return false;
    }
}
我的插件代码:

function check_category(){  
    global $rtlDir;
    if ( $category_to_check = get_term_by( \'slug\', \'category-3\', \'category\' )){
        if(post_is_in_descendant_category($category_to_check->term_id)){
            $rtlDir = true;
        }else{
            $rtlDir = false;
        }
    }

}
add_filter("wp","check_category");

1 个回复
SO网友:gmazzap

home.php 是帖子的存档,当您查看时home.php 和插件运行中的函数,(在“wp”挂钩上)有no 当前职位。

那么函数post_is_in_descendant_category 呼叫in_category($descendants, null) 那个can never return true 如果没有当前职位。

因此,您应该在上运行插件函数\'the_post\' 动作挂钩,如果您希望它对存档中的每个帖子都运行,例如:

add_filter("the_post", "check_category");

function check_category($post) {
  // here your code
  global $rtlDir;
  if ( $category_to_check = get_term_by( \'slug\', \'category-3\', \'category\' ) ){
    if( post_is_in_descendant_category($category_to_check->term_id, $post) ){
        $rtlDir = true;
    } else {
        $rtlDir = false;
    }
  }
}
这应该可以,但似乎不是一个好的解决方案:这会为每个帖子运行额外的db查询。。。

如果您解释运行此代码的原因,并且您想要获得的可能是找到一个性能更好的解决方案。

结束

相关推荐

POSTS_WHERE失败,查询中有多个自定义字段

单独查询这两个字段中的任何一个都会得到预期的结果(显示帖子)。但是,当这两个字段都包含在查询中时(例如下面的示例中显示的“foo”和“bar”),则不会显示帖子。function do_stuff( ) { global $wpdb; return \" AND ($wpdb->postmeta.meta_key = \'foo\' AND $wpdb->postmeta.meta_value = \'1\')