我为 Wordpress 构建了这个简码函数,它列出了所有评论状态为特定类别的帖子。
我在一个页面上使用它来对我的博客上的公开讨论进行某种总结。它可以工作,但是在我使用它之后,我的 wordpress 页面的全局 wo 查询被我的简码列出的最后一篇文章所更改。
例如,页面底部的“编辑”链接让我编辑简码列出的最后一篇文章,而不是我所在的页面。
我使用了标准的 wp_reset_query(); 修复它的功能,但它不工作......任何想法?
这是代码:
1) 选择所有带有 comment_status = $status 的帖子
function get_posts_based_on_comment_status($categories, $status='open', $limit=100) {
global $wpdb;
$sql = "SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships
ON($wpdb->posts.ID=$wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy
ON($wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id='$categories'
AND $wpdb->term_taxonomy.taxonomy='category'
AND $wpdb->posts.post_status='publish'
AND $wpdb->posts.comment_status='$status'
ORDER BY $wpdb->posts.post_date DESC
LIMIT $limit;";
$results = $wpdb->get_results($sql);
if (!empty($results)) return $results;
else return FALSE;
}
2)构建循环(最后使用重置)
function print_posts_based_on_comments($atts) {
$render = '';
extract(shortcode_atts(array(
'cat' => '',
'title' => '',
'comment' => 'open',
'limit' => 10
), $atts));
$render .= '<div class="forum_post_list">';
if ($cat){
$block_title = ($title != '')? $title : get_cat_name( $cat ) ;
if ($block_title != 'no'){
$render .= '<h3>'.$block_title.'</h3>';
}
$posts_c = get_posts_based_on_comment_status($cat, $comment, $limit);
if ($posts_c) {
global $post;
$render .= '<ul>';
foreach ($posts_c as $post) :
setup_postdata($post);
$comment_count = get_comments_number( get_the_ID() );
$render .= '<li>';
$render .= '<h5>';
$render .= '<a class="title" href="'. get_permalink().'">'. get_the_title().'</a> ';
$render .= '<a class="comments" href="'. get_permalink().'#comment-wrap">'.$comment_count.'<span>Go to Discussion</span></a>';
$render .= '</h5>';
$render .= '</li>';
endforeach;
$render .= '</ul>';
}
} else{
$render .= '<h5>'.__('You Must Specify at least one category. Ex: [forum cat=1]', 'smallscalefarming').'</h5>';
}
$render .= '</div>';
return $render;
wp_reset_query();
}
3)简码它
add_shortcode('forum', 'print_posts_based_on_comments');