基于类别名称的相关内容

时间:2015-01-31 作者:Mr. B

我想修改下面的代码,以便它根据帖子所在的类别和“仅”该类别、“不”子类别、其他类别、仅当前帖子的类别获取数据。

我看了说明书get_the_category()WP_Query Category Parameters, 但我做错了什么。

有什么调整的建议吗?

我的类别结构如下。

ParentA
-childA
-childB
--childB1
--childB2
-childC
ParentA充当“容器”,其中没有帖子。我想在类别childA中的帖子显示来自其他帖子的数据,而只显示来自childA的“仅”数据,其他什么都不显示。

以下代码由Andrei Ghorghiu提供(再次感谢)

 /**
     * tag related posts
     */
    function relatedCategoryPosts() {
$cats = get_the_category();
$html = \'\';
if ( $cats ) {
    $cat_ids = array();
    foreach ( $cats as $cat ) {
        $cat_ids[] = $cat->ID;
    }
    $posts = get_posts(\'numberposts=5&orderby=rand&fields=all&category__in=\'.implode(\',\',$cat_ids));

    if ( $posts ) {
        foreach ( $posts as $post ) {
            $meta = get_post_meta( $post->ID );
            $image = $meta[\'og_image\'][0];
            $html .= \'<a href="http://www.abcmysitexyz.com/\'.$post->post_name.\'/"><img src="\'.$image.\'"  class="alignnone"  /></a>\';
        }
    }
}
return do_shortcode($html);     
}

add_shortcode(\'related\', \'relatedCategoryPosts\');

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

这里有几个缺陷,还有几个地方可以优化代码

而不是使用get_the_category(), 使用wp_get_post_terms(). 这要快一点,您可以选择从帖子类别中获取术语ID。这是一个可以优化代码的地方

  • ID 不是的有效属性get_the_category(), 应该是这样的cat_ID 或者您可以使用term_id

    你可以直接回来$html

    这里不需要使用短代码。这有点慢,因为需要解析短代码。您只需在需要的地方调用该函数即可。

    您可以将代码简化为以下内容

    function get_related_category_posts() {
    
        $cats = wp_get_post_terms( get_queried_object_id(), \'category\', array( \'fields\' => \'ids\' ));
        $html = \'\';
    
        $posts = get_posts( array( \'numberposts\' => 5, \'orderby\' => \'rand\', \'category__in\' => $cats ) );
    
            if ( $posts ) {
                foreach ( $posts as $post ) {
                    $meta = get_post_meta( $post->ID );
                    $image = $meta[\'og_image\'][0];
                    $html .= \'<a href="http://www.abcmysitexyz.com/\'.$post->post_name.\'/"><img src="\'.$image.\'"  class="alignnone"  /></a>\';
                }
            }
        return $html; 
    
    }
    
    然后这样称呼它echo get_related_category_posts(); 无论何时,您都可以在单个模板中使用它

  • 结束