自定义POST类型模板上的多个循环?

时间:2013-04-26 作者:Syrehn

我在添加多个循环时遇到一些问题。我有一个自定义的post类型(locations),它使用一个页面模板(single locations.php)。我正在尝试向该模板添加其他循环,该循环将显示(x)来自不同类别(常规帖子类别)的帖子数量,具体取决于用户使用的自定义帖子类型id。

出现的问题是,根据下面的代码,定义的所有不同自定义帖子类型id都加载相同的5篇帖子(如第一次查询中所示),但不是从定义的特定类别加载。此外,不接受每个自定义帖子类型id下的查询。我不确定if/elseif语句是否有误,或者主自定义post类型循环是否有干扰。

任何关于如何使其工作的建议都将非常有用。:)

<div id="content" class="col-full">

            <section id="secondary-content" class="col-left">

                <?php 

                    global $post;
                    $meta_history = get_post_meta($post->ID, \'bb-history\', true );
                    $meta_message = get_post_meta($post->ID, \'bb-mayors-message\', true );
                    $meta_news = get_post_meta($post->ID, \'bb-current-news\', true );

                ?>

                <h1><?php the_title(); ?></h1>

                <?php echo $meta_history; ?>

                <h1>Mayor\'s Message</h1>

                <?php echo $meta_message; ?>

                <h1>Current News</h1>

                <?php echo $meta_news; ?>

                <?php

                // get_post_type (44)
                if ( \'locations\' == get_post_type( 44 ) ){

                    // Display 5 Posts From Category 5
                    $args = array(

                        \'posts_per_page\'  => 5,
                        \'category\'        => \'5\',
                        \'orderby\'         => \'post_date\',
                        \'order\'           => \'DESC\');

                    $loc1 = new WP_Query($args);

                    while ( $loc1->have_posts() ) : $loc1->the_post(); global $post;

                        ?>

                       <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

                        <?php
                        the_excerpt(); 

                    endwhile; wp_reset_postdata();


                // get_post_type (46)
                } else if ( \'locations\' == get_post_type( 46 ) ) {

                    // Display 3 Posts From Category 10
                    $args = array(

                        \'posts_per_page\'  => 3,
                        \'category\'        => \'10\',
                        \'orderby\'         => \'post_date\',
                        \'order\'           => \'DESC\');

                    $loc2 = new WP_Query($args);

                    while ( $loc2->have_posts() ) : $loc2->the_post(); global $post;

                        ?>

                       <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

                        <?php
                        the_excerpt(); 

                    endwhile; wp_reset_postdata();


                // get_post_type (52)
                } else if ( \'locations\' == get_post_type( 52 ) ) {

                    // Display 3 Posts From Category 7
                    $args = array(

                        \'posts_per_page\'  => 3,
                        \'category\'        => \'7\',
                        \'orderby\'         => \'post_date\',
                        \'order\'           => \'DESC\');

                    $loc3 = new WP_Query($args);

                    while ( $loc3->have_posts() ) : $loc3->the_post(); global $post;

                        ?>

                       <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

                        <?php
                        the_excerpt(); 

                    endwhile; wp_reset_postdata();


                // get_post_type (55)
                } else if ( \'locations\' == get_post_type( 55 ) ) {

                    // Display 3 Posts From Category
                    $args = array(

                        \'posts_per_page\'  => 3,
                        \'category\'        => \'8\',
                        \'orderby\'         => \'post_date\',
                        \'order\'           => \'DESC\');

                    $loc4 = new WP_Query($args);

                    while ( $loc4->have_posts() ) : $loc4->the_post(); global $post;

                        ?>

                       <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

                        <?php
                        the_excerpt(); 

                    endwhile; wp_reset_postdata();

                }

                // get_post_type (57)
                else if ( \'locations\' == get_post_type( 57 ) ) {

                    // Display 3 Posts From Category 9
                    $args = array(

                        \'posts_per_page\'  => 3,
                        \'category\'        => \'9\',
                        \'orderby\'         => \'post_date\',
                        \'order\'           => \'DESC\');

                    $loc5 = new WP_Query($args);

                    while ( $loc5->have_posts() ) : $loc5->the_post(); global $post;

                        ?>

                       <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>

                        <?php
                        the_excerpt(); 

                    endwhile; wp_reset_postdata();

                }

                ?>



            </section>

            <section id="primary-content" class="col-left">

                <!-- Front Page Articles -->

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

                <article <?php post_class(); ?> role="article">

                    <section class="entry fix">

                        <?php the_content(); ?>

                        <?php wp_link_pages( array( \'before\' => \'<div class="page-link">\' . __( \'Pages:\' ), \'after\' => \'</div>\' ) ); ?>

                    </section>


                </article><!-- /.post -->

                <?php endwhile; //End WhILE Loop ?>

                <?php else : ?>

                <article <?php post_class(); ?>>
                    <p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
                </article><!-- .post -->

                <?php endif; //End IF Statement ?>

            </section>
            <!-- End #main -->

            <?php get_sidebar(); ?>

        </div>
        <!-- End #content -->

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

听起来你想做的是根据类别为你的“位置”单篇帖子显示一种“相关帖子”功能。

您无需检查帖子是否属于“位置”帖子类型。您正在使用single-locations.php 除非你的网站被破坏,否则只有“位置”帖子才会出现在那里。你真的只需要检查一下身份证。

// Most of $args is the same every time. 
// no need to repeat it
$args = array(
    \'posts_per_page\'  => 5,
    \'orderby\'         => \'post_date\',
    \'order\'           => \'DESC\'
);

if ( 44 == $post->ID ){
    $args[\'cat\'] = 5; // Note: the parameter is \'cat\' not category    
} elseif (46 == $post->ID ) {
    $args[\'cat\'] = 10; // Note: the parameter is \'cat\' not category    
} // and so on

$loc = new WP_Query($args);
while ( $loc->have_posts() ) : $loc->the_post(); global $post; ?>
    <h3><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3><?php
    the_excerpt(); 
endwhile; wp_reset_postdata();
我冒昧地清理了你的代码。

无需重复完整的$args 每次都是数组,因为它的大部分都没有改变category to cat这需要阅读大量代码。如果我错过了什么,我很抱歉,但我认为这应该对你更好一些。

结束

相关推荐

New loop vs widget

所以,我有一个侧边栏,我将列出所有帖子,我可以使用一个小部件。但是,使用一个新的循环而不是一个小部件或优先选择是否合适?