WooThemes迷你功能-修改QUERY_POST以仅显示Sticky_POST

时间:2012-11-12 作者:Jason

/* Mini-Features */
        ?>
        <div id="sub-featured" class="<?php echo $main_css_class; ?> section">
            <h2 class="section-title"><?php echo stripslashes( $featured_title ); ?></h2>

            <?php 
                query_posts( \'suppress_filters=0&post_type=infobox&order=ASC&posts_per_page=\' . $mini_features_number );
                if ( have_posts() ) { $count = 0; while ( have_posts() ) { the_post(); $count++;

                $excerpt = stripslashes( get_post_meta( $post->ID, \'mini_excerpt\', true ) ); 
                $button = get_post_meta( $post->ID, \'mini_readmore\', true );
                $post_class = \'post block\';

                if ( $count % $mini_features_count == 0 ) { $post_class .= \' last\'; }
            ?>
                <div <?php post_class( $post_class ); ?>>

                        <a href="<?php echo $button; ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php woo_image( \'key=mini-image&width=300&height=150&class=thumbnail aligncenter&link=img\' ); ?></a>

                        <h3 class="title"><a href="<?php echo $button; ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
                        <?php if ( $excerpt ) { ?>
                        <div class="entry">
                            <?php echo $excerpt; ?>
                        </div>
                        <?php } ?>

                </div><!-- /.post -->
            <?php
                if ( $count % $mini_features_count == 0 ) { echo \'<div class="fix"></div>\'; }
                } // End WHILE Loop
            } else {
            ?>
                <div class="post">
                    <p><?php _e( \'Sorry, no posts matched your criteria.\', \'woothemes\' ); ?></p>
                </div><!-- /.post -->
            <?php } // End IF Statement ?>  
        </div><!-- /#mini-features -->
这就是代码,在其中的某个地方,我需要指定只显示sticky\\u贴子,这就是我要解开的地方。我已经查看了query\\u帖子和;sticky\\u帖子(&U);老实说,我不知道从哪里开始修改上面的内容。。。我做的第一件事是(向那些自定义帖子类型)添加一个粘性帖子元框的功能(感谢:Sticky Custom Post Types - 这很管用)。

作为主题选项的一部分,我可以指定要显示的帖子数量(在我的例子中是3x),但在我修改上述代码以仅显示sticky\\u帖子之前,我最终会显示2x sticky\\u帖子(另一个随机)。我被卡住了,所以任何指点都将不胜感激!

1 个回复
SO网友:Milo

这可能有点复杂,如果您想专门查询其他帖子类型,我建议您不要将粘性特性添加到其他帖子类型中,而是使用post meta 将自定义类型指定为“粘滞”。如果在多个帖子类型上使用粘滞特性,您将使用以下代码获得意外的结果,因为粘滞帖子存储为一个帖子ID数组,与它们所引用的帖子类型无关。如果您没有在其他帖子类型上使用粘性功能,那么下面的代码应该可以正常工作。

首先,粘性帖子保存在选项中\'sticky_posts\', 要获得有限数量的这些ID,我们需要slice the array 只获取我们想要的数量,然后我们将其作为post__in 我们的查询的参数。

其次,粘性帖子是在查询中指定的内容之上添加到查询中的,因此我们需要设置的参数之一是忽略粘性帖子,这似乎违反直觉,但我们希望自己显式查询这些帖子,而不是将它们添加到查询中。

最后,由于这是一个附加查询,we don\'t want to use query_posts, 我们使用新的WP_Query 相反

// limit the number to our mini features number
$sticky = array_slice( get_option(\'sticky_posts\'), 0, $mini_features_number );

$mini_features = new WP_Query(array(
    \'post_type\' => \'infobox\',
    \'post__in\' => $sticky,
    \'ignore_sticky_posts\' => 1,
    \'posts_per_page\' => $mini_features_number // possibly redundant, but in case it\'s larger than default posts_per_page
));

while( $mini_features->have_posts() ):
    $mini_features->the_post();
    // your loop stuff
endwhile;

结束

相关推荐