我在添加多个循环时遇到一些问题。我有一个自定义的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 -->
最合适的回答,由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
无需为每个类别创建不同的变量或查询。您可以使用相同的名称和一个查询。相反,构建查询参数数组,然后放置查询本身和循环这需要阅读大量代码。如果我错过了什么,我很抱歉,但我认为这应该对你更好一些。