“正确的方式”使自定义循环尊重管理面板内的阅读设置?

时间:2013-05-08 作者:Dejo Dekic

我已经使用WP\\u Query创建了自定义Wordpress循环,循环运行良好,我可以很好地自定义它,但是我在使用“博客页面最多显示”设置时遇到了问题,例如,如果我在我的循环中添加了以下参数\'post_per_page\' =>-1 我的循环显示所有帖子,但现在我无法在管理面板中插入自定义数量的帖子,如果我输入“博客页面最多显示”3(三个代表帖子数量),它们将被忽略,循环显示所有帖子

为了克服这个问题(因为我想控制显示在管理员阅读设置中的帖子数量)
我做了以下工作:创建一个空值变量,并将其作为如下参数传递:

$show_my_posts = \'\';
$args = array(

     \'paged\' => $paged,
     \'post_not_in\' => $show_my_posts
     //added blank value variable in order to respect "Blog pages show at most" in backend
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);
因此,现在,我可以在管理后端中插入自定义数量的帖子,我的循环按我所希望的方式运行(我输入“博客页面最多显示”,值为3),现在我的循环按我所希望的方式显示三篇帖子

我的问题是:我这样做是“正确的方式”还是有更好的方式来实现这种行为 THX!!

我的完整循环如下所示:

<?php //enable pagination on static pages and blog pages
    $show_my_posts = \'\';
    $col = 1; //Let\'s create first column
    /*Let\'s add pagination to post page and static page*/
    if ( get_query_var(\'paged\') ) {
    $paged = get_query_var(\'paged\');
    } elseif ( get_query_var(\'page\') ) {
    $paged = get_query_var(\'page\');
    } else {
    $paged = 1;
    }

$args = array(
    /* Add whatever you need here - see http://codex.wordpress.org/Class_Reference/WP_Query */    
     \'paged\' => $paged,
     \'post_not_in\' => $show_my_posts
             //added blank value variable in order to respect 
            //"Blog pages show at most" in backend
);
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query($args);

if($wp_query->have_posts()):?><?php while ( $wp_query->have_posts() ) : $wp_query->the_post();?>        

<?php if ($col == 1) echo \'<div class="row">\';//If column 1 create first row ?>
<?php if ($col == 2) echo \'<div class="row2">\';//If column 2 create second row ?>
    <div <?php post_class(\'col\'.$col); ?> id="post-<?php the_ID(); ?>">
    <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
        <div class="entry"> 
                <div class="featured_img">
                <?php the_post_thumbnail();
      echo \'<div class="featured_caption">\' . get_post(get_post_thumbnail_id())->post_excerpt . \'</div>\';?>
     </div><!--/featured_img-->
        <?php  // let\'s enable more link on pages...
        global $more;
        $more = 0;
        ?>
            <?php the_content(); ?> 
            <div class="clear"></div>               
            <div class="custom_fields"><?php the_meta(); ?></div><br/>
            <p class="postmetadata">

            <?php _e(\'Filed under&#58;\',\'domain\'); ?> <?php the_category(\', \') ?> <?php _e(\'by\',\'domain\'); ?> <?php  the_author(); ?><br/><?php the_tags(\'Tags:\', \', \', \'<br />\'); ?>
            <?php _e(\'Posted on:&nbsp;\',\'domain\'); ?><?php the_time(\'l, F jS, Y\'); ?><br/>

            <?php comments_popup_link(\'No Comments &#187;\', \'1 Comment &#187;\', \'% Comments &#187;\'); ?> <?php edit_post_link(\'Edit\', \' &#124; \', \'\'); ?>
            </p>
        </div>
    </div>

    <?php /*Enable Two Column Layout*/
        if($col==1) {
        $col=2;
        echo "</div>";
        }
        else if($col==2)  {
        $col=1;
         echo "</div>";
        }

    endwhile; ?>
    <div class="clear"></div>
    <div class="navigation">

    <?php
    global $wp_query;
    $big = 999999999; // need an unlikely integer

    echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\' => \'?paged=%#%\',
    \'current\' => max( 1, $paged ),
    \'total\' => $wp_query->max_num_pages
    ) );
    ?>
</div>
<?php endif; ?> 
<?php
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>

2 个回复
最合适的回答,由SO网友:vancoder 整理而成

我不知道为什么你的空白变量方法应该有效,但在我看来它似乎很狡猾。我会将posts\\u per\\u页面显式设置为设置中定义的数字:

\'posts_per_page\' => get_option( \'posts_per_page\' )

SO网友:s_ha_dum

。。。例如,在我的循环中,如果我添加了以下参数\'post_per_page\' =>-1 我的循环显示所有帖子,但现在如果我输入“博客页面最多显示”3(三个代表帖子数量),我无法在管理面板中插入我的自定义帖子数量。它们被忽略,循环显示所有帖子。

当然不能。您已用覆盖了管理设置\'post_per_page\' =>-1

但你的网站有些奇怪。如果没有显式设置posts_per_page WordPress应使用后端中定义的值--you can see that in the source. WordPress运行与@vancoder建议的相同的函数调用--$q[\'posts_per_page\'] = get_option(\'posts_per_page\');.

我假设@vancoder的解决方案(非常好的解决方案,我投了赞成票)已经解决了这个问题,因为它被标记为“接受”,但这是一个重新启用默认情况下应该发生的事情的解决方案。真正的问题在其他地方,可能是编写糟糕的过滤器或操作过于激进地操纵查询。我敢打赌pre_get_posts 作为诱饵,如果没有更多的信息,这是不可能的。

结束

相关推荐

自定义发布类型和Query_Posts的页面上的404

我花了很长时间才找到一个很好的解决方案,可以通过两个自定义元键来订购自定义帖子类型。当我最终让它工作时,我发现分页已经不起作用了。我尝试了在线找到的几十个不同的代码片段,但都没有修复我的唯一性。如果我能得到任何帮助,我将不胜感激,或者如果你认为重写可以奏效,请为我提供一个更好的方法来做到这一点的例子。我有一个名为“剧集”的自定义帖子类型。这些都有我想排序的季节和集号。存档剧集。phpif ( get_query_var(\'page\') ) { $paged = get_query_var(\'page