如何获得bbpress的粘性话题

时间:2013-07-30 作者:arslaan ejaz

我想使用如下查询获取bbpress粘性主题:

$sticky = get_option(\'sticky_posts\');
    rsort( $sticky );
    $sticky = array_slice( $sticky, 0, 2);
        query_posts( array( \'post__in\' => $sticky, \'caller_get_posts\' => 1, \'post_type\'=> \'topic\' ) );
if (have_posts()) : 
    while (have_posts()) : the_post(); 
//do something
endwhile;
endif; 
我怎样才能使查询像这样工作?

5 个回复
SO网友:Vinod Dalvi

您可以使用以下代码进行上述查询。

<?php
query_posts( array( \'posts_per_page\' => 2, \'meta_key\' => \'_bbp_sticky_topics\',  \'post_type\'=> \'topic\', \'order\' => \'ASC\' ) );
if (have_posts()) : 
    while (have_posts()) : the_post(); 
        //do something
    endwhile;
endif; 
?>
但我强烈建议您不要使用query\\u posts()更改主查询,而是使用WP_Query 如下所示。

<?php 
$query = new WP_Query( array( \'posts_per_page\' => 2, \'meta_key\' => \'_bbp_sticky_topics\', \'post_type\'=> \'topic\', \'order\' => \'ASC\' ) );
if ( $query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post(); 
        //do something
    endwhile;
endif; 
/* Restore original Post Data */
wp_reset_postdata();
?>

SO网友:Alberto

更好的方法是:

$query = new WP_Query( array( \'p\' => $post->ID, \'post_type\'=> \'forum\', \'meta_key\' => \'_bbp_sticky_topics\' ) );
            if ( $query->have_posts()) : 
                while ($query->have_posts()) : $query->the_post(); 
                    $sticky = get_post_meta( $post->ID, \'_bbp_sticky_topics\' );
                    $sticky = maybe_unserialize( $sticky );                 
                endwhile;
            endif;          
            wp_reset_postdata();
然后$sticky将是一个数组,其中包含您正在查询的当前论坛中的所有粘性主题,您可以使用它进行第二次查询post__in 显示粘性主题的内容、标题等。

SO网友:arslaan ejaz

经过大量的变通,我找到了解决方案。此代码将为您提供结果,以及我将解释的原因:

<?php 
$query = new WP_Query( array( \'posts_per_page\' => 2,\'post_type\'=> \'forum\', \'meta_key\' => \'_bbp_sticky_topics\' ) );
if ( $query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post(); 
        the_title(); echo \'<br />\'; the_ID(); echo \'<br />\';
    endwhile;
endif; 
/* Restore original Post Data */
wp_reset_postdata();
?> 
诀窍在于\'post_type\'=> \'forum\' 而不是\'post_type\'=> \'topics\', 它会显示论坛而不是主题,因为wp\\U Posteta会这样保存数据a:1:{i:0;i:632;} 使用post_id of forum not topics. 感谢维诺德·达尔维,他真的给了我解决这个问题的方向。

SO网友:jetlej

为了便于将来参考,若您只想获得一组超级粘性主题(粘贴在前面),那个么您可以简单地使用以下代码:

$stickies = get_option( \'_bbp_super_sticky_topics\', array() );

SO网友:admcfajn

Another answer, from this bbpress.org thread

$query = new WP_Query(array(\'post__in\' => bbp_get_super_stickies());

结束