这听起来有点疯狂。我的情况是,我正在显示用户选择移动到产品页面的产品列表。我还创建了自定义帖子类型和字段的文档和视频。我需要在当前循环中运行第二个循环,以从自定义帖子类型中提取自定义字段。这有意义吗?
例如,这是产品“目录”循环(请原谅我的黑客技术)
<div id="content" role="main">
<?php
$parent = $post->ID;
query_posts(\'post_type=page&order=ASC&orderby=title&post_parent=\'.$parent);?>
<?php while (have_posts()) : the_post(); ?>
<?php $model = get_the_title(); ?>
<div class="product-selection-container round">
<h2 class="directory-title"><a href="<?php the_permalink() ?>"><?php echo get_post_meta($post->ID, "product-main-title", true); ?></a></h2>
<h3>Model <?php echo $model ?></h3><!-- the model -->
<?php echo my_excerpts(); ?>
<ul class="round">
<li><a href="<?php the_permalink() ?>">Learn More</a></li>
<li><a href="">Specification Sheet</a></li>
<li><a href="">Video Tour</a></li>
</ul>
</div>
</div>
<?php endwhile; ?>
这是我通常用于向页面添加文档的循环(不包括自定义循环模板)
<?php
$documents = array(\'numberposts\' => 5, \'post_type\' => \'documents\', \'category_name\' => $model);
query_posts( $documents );
get_template_part( \'loop\', \'documents\' );
wp_reset_query();
?>
我尝试将二者结合起来,在其中添加第二个循环
<li><a href="">Specification Sheet</a></li>
但这导致页面在一个永久循环中运行。
我正在寻找的另一种选择是从post类型中提取单个自定义字段,而不创建循环。例如
get post_type => document, meta_key => document-type, meta_value => spec-sheet
任何帮助都将不胜感激。
最合适的回答,由SO网友:Wok 整理而成
我猜你在用这样的东西。。。获取所需的自定义值。一旦进入循环。
$customfieldvalue = get_post_meta($post->ID, "metakeyname", true);
因为您使用$model作为查询的基础。您可以创建一个查询所需内容的函数,然后重置当前查询。你可以在任何地方使用它。这是一个模板。
function modelquery($model) {
global $wp_query, $post, $paged, $post_count;
// YOUR QUERY
$query_args = array (
\'numberposts\' => 5,
\'post_type\' => \'documents\',
\'category_name\' => $model
);
// SAVE CURRENT QUERY
$temp = $wp_query;
$wp_query= null;
// CREATE NEW QUERY
$wp_query = new WP_Query();
$wp_query->query($query_args);
// THE LOOP, DO WHAT YOU HAVE TO DO HERE
while ($wp_query->have_posts()) : $wp_query->the_post();
$customfieldvalue = get_post_meta($post->ID, "metakeyname", true);
echo $customfieldvalue;
endwhile;
// SWAP BACK THE PREVIOUS QUERY
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
}