看起来您根本没有将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
, 如果有空字符串,只需返回空字符串即可。