从循环内的自定义帖子中提取自定义域

时间:2011-03-25 作者:Zach Shallbetter

这听起来有点疯狂。我的情况是,我正在显示用户选择移动到产品页面的产品列表。我还创建了自定义帖子类型和字段的文档和视频。我需要在当前循环中运行第二个循环,以从自定义帖子类型中提取自定义字段。这有意义吗?

例如,这是产品“目录”循环(请原谅我的黑客技术)

<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
任何帮助都将不胜感激。

1 个回复
最合适的回答,由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();       


}

结束

相关推荐