按类别、标签和CPT分类获取帖子

时间:2021-03-14 作者:Puneet Verma

如何仅打印具有类别、标记、CPT分类的帖子。

我试用过这个代码,但没有打印出来。为了打印帖子,我使用了SS[commonposts类别=“2”标记=“3”分类=“公司”税务术语=“4”每页帖子=“5”]

function common_cats($att){
    $args = array(
    \'post_type\'=> \'post\',
    \'category\'    => [\'category\'],
    \'tag\'    => [\'tag\'],
    \'taxonomy\'    => [\'taxonomy\'],
    \'tax_term\'    => [\'tax_term\'],
    \'posts_per_page\' => [\'posts_per_page\']
     );              
  $the_query = new WP_Query( $args );
   if($the_query->have_posts() ) : 
    while ( $the_query->have_posts() ) : 
     $the_query->the_post(); 
      $output .= "<a href=".get_permalink().">.the_title().</a>";
  endwhile; 
    wp_reset_postdata(); 
else: 
endif;
}
add_shortcode(\'commonposts\', \'common_cats\');
感谢大家的努力。

1 个回复
SO网友:Antti Koskinen

看起来您根本没有将shortcode属性传递给查询参数。参数数组结构也有点不稳定。这个WP_Query parameter docs 创建自定义查询时是您的好友。您的短代码还应该返回其输出以显示任何内容。

下面是代码的修改版本,它应该为您指明正确的方向。

function common_cats($attributes){

    $args = array(
        \'post_type\' => \'post\',
        \'posts_per_page\' => ! empty($attributes[\'posts_per_page\']) ? absint($attributes[\'posts_per_page\']) : 5,
    );

    /**
      * Category parameters
      * @source https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
      */
    if ( ! empty($attributes[\'category\']) ) {
        if ( is_numeric($attributes[\'category\']) ) {
            // Category ID
            $args[\'cat\'] = absint($attributes[\'category\']);
        } else {
            // Category slug
            $args[\'category_name\'] = $attributes[\'category\'];
        }
    }

    /**
      * Tag parameters
      * @source https://developer.wordpress.org/reference/classes/wp_query/#tag-parameters
      */
    if ( ! empty($attributes[\'tag\']) ) {
        if ( is_numeric($attributes[\'tag\']) ) {
            // Tag ID
            $args[\'tag_id\'] = absint($attributes[\'tag\']);
        } else {
            // Tag slug
            $args[\'tag\'] = $attributes[\'tag\'];
        }
    }

    /**
      * Custom taxonomy parameters
      * @source https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters
      */
    if (
        ! empty($attributes[\'taxonomy\']) &&
        ! empty($attributes[\'tax_term\'])
    ) {
        $args[\'term_query\'] = array(
            array(
                \'taxonomy\' => $attributes[\'taxonomy\'],
                \'field\' => \'term_id\',
                \'terms\' => absint($attributes[\'tax_term\']),
            ),
        );
    }

    // helper variable to hold the shortcode output
    $output = \'\';

    // query posts
    $query = new WP_Query( $args );

    // You can check for posts directly from the query posts property (array)
    if ( $query->posts ) {
        // Setting up the Loop is not strictly necessary here
        // you can use the WP_Post properties directly
        foreach ($query->posts as $post) {
            $output .= sprintf(
                \'<a href="%s">%s</a>\',
                esc_url( get_permalink( $post->ID ) ),
                esc_html( $post->post_title )
            );
        }
    }

    // Shortcode should return its output
    return $output;
}
add_shortcode(\'commonposts\', \'common_cats\');
如果要将类别、标记和自定义分类术语作为必需参数,可以检查它们在中是否为空$args, 在将其传递给WP_Query, 如果有空字符串,只需返回空字符串即可。

相关推荐

我可以将参数传递给Add_ShortCode()函数吗?

正如标题所述,我需要向add_shortcode() 作用换句话说,我传递的那些参数将在的回调函数中使用add_shortcode(). 我该怎么做?请注意,这些与以下结构无关[shortcode 1 2 3] 哪里1, 2, 和3 是用户传递的参数。在我的情况下,参数仅用于编程目的,不应由用户负责。谢谢