你这里有很多问题;
永远不要使用query_posts
, 它打破了主查询和页面功能。
甚至在之前,您就已经中断并取消了主查询query_posts
可以在这一行进行更改$wp_query= null
由于这是一个短代码(摘自您的评论),因此使用这一行,\'posts_per_page\' => $num,
, 我相信你正在使用extract()
. 你不应该使用extract()
因为它几乎不可调试,不可靠,并且会无声地失败。因此,它被从核心功能中删除`
正确的值orderby
按发布日期排序是date
, 不post_date
. 这是默认值,因此您可以忽略它,因为您没有通过属性修改它。这也适用于offset
和order
您需要使用tax_query
从特定术语获取帖子
这里有一个小示例,您可以从中学习。(请注意,您应该清理并验证所有用户输入。我没有这样做过)。
add_shortcode( \'my_shortcode\', function ( $atts )
{
$attributes = shortcode_atts(
[
\'numberposts\' => 10, // Default amount of posts to show
\'post_type\' => \'technologies\', // Default post type
\'taxonomy\' => \'importance\', // Default taxonomy
\'terms\' => \'featured\' // Default term to exclude
],
$atts,
\'my_shortcode\'
);
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$args = [
\'posts_per_page\' => $attributes[\'numberposts\'],
\'post_type\' => $attributes[\'post_type\'],
\'tax_query\' => [
[
\'taxonomy\' => $attributes[\'taxonomy\'],
\'field\' => \'slug\',
\'terms\' => $attributes[\'terms\'],
\'operator\' => \'NOT IN\' // This will exclude all posts with terms set in \'terms\'
]
],
\'post_status\' => \'publish\',
\'paged\' => $paged,
\'suppress_filters\' => true
];
$q = new WP_Query( $args );
$output = \'\';
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
$output .= apply_filters( \'the_title\', get_the_title() );
}
$output .= get_next_posts_links( \'Next\', $q->max_num_pages );
$output .= get_previous_posts_links( \'Previous\' );
wp_reset_postdata();
}
return $output;
});
你可以把它叫做
[my_shortcode]
如果不需要更改默认值
最后的注释我假设您希望排除featured
学期,所以我写了tax_query
围绕这一点。
您需要PHP5。4+因为代码使用了新的短数组语法([]
). 如果有旧版本,只需更改为旧的数组语法(array()
). 只需确保至少有PHP 5.3支持使用的闭包