具有多个可变帖子ID的Wordpress查询

时间:2016-03-18 20:16:54

标签: php mysql arrays wordpress

我尝试创建一个自定义wordpress查询,该查询根据使用Elliot Condon的高级自定义字段设置的3个不同变量提取3个特定ID。

我用它来设置我的变量:

<?php
    $post1 = get_field('post_1');
    $post2 = get_field('post_2');
    $post3 = get_field('post_3');
?>

我想将这些变量传递给这样的自定义查询:

<?php
    $post_list = array($post1, $post2, $post3);
    foreach( $post_list as $post_id ) :
        query_posts('p='.$post_id);
        while (have_posts()) : the_post();
        // echo the post
        endwhile;
        wp_reset_query();
    endforeach;
?>

然而,上述情况似乎无效并导致页面损坏。任何人有任何想法如何解决?我显然错误地将变量传递给查询,但我无法弄清楚如何修复它。

编辑 - 解决方案

这是工作更新的块。非常感谢DACrosby!我正在运行自定义帖子类型的查询,因此我需要指定$args中的哪种类型。

<div class="row">
    <?php
    $post1 = get_field('related_1');
    $post2 = get_field('related_2');
    $post3 = get_field('related_3');
    $args = array(
        'post__in' => array( $post1, $post2, $post3 ),
        'post_type' => 'work'
    );
    $the_query = new WP_Query( $args );
    ?>
    <?php if ( $the_query->have_posts() ): ?>
    <ul class="case-studies cf fade-in fade-in-3">
        <!-- Basic Projects -->
        <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <?php
                //Get Featured Image URL
                $feat_image = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
                //Get Project Categories
                $terms = get_the_terms( $post->ID, 'type' );
            ?>
            <li class="case-study">
                <img src="<?php echo $feat_image; ?>" alt="<?php the_title(); ?>">
                <a href="<?php the_permalink(); ?>" class="cs-hover">
                    <div class="col-table cs-text">
                        <div class="col-tcell">
                            <span><?php the_title(); ?></span>
                            <span class="divider"></span>
                            <span><?php the_field('description'); ?></span>
                            <?php if(get_field('services')): ?>
                                <ul class="tags">
                                    <?php while(has_sub_field('services')): ?>
                                        <li><?php the_sub_field('service'); ?></li>
                                    <?php endwhile; ?>
                                </ul>
                            <?php endif; ?>
                            <span class="text-link">View Project</span>
                        </div>
                    </div>
                </a>
            </li>
        <?php endwhile; ?>
    </ul>
    <?php endif; ?>
    <?php wp_reset_query(); ?>
</div>

1 个答案:

答案 0 :(得分:1)

From the documentation

  

警告 query_posts()只是众多人查询数据库和生成帖子列表的一种方式。在决定使用query_posts()之前,请务必了解其缺点。

     

更改主循环 query_posts()用于更改主循环。 ...

     

辅助循环要创建辅助列表(例如,页面底部的相关帖子列表或侧栏小部件中的链接列表),请尝试创建WP_Query的新实例或使用get_posts()。

An example of WP_Query usage:

// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
  echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
    echo '</ul>';
} else {
    // no posts found
}
/* Restore original Post Data */
wp_reset_postdata();

从那里你只需要修改发送给WP_Query的$ args。例如:

$args = array(
         'post__in' => array( $post1, $post2, $post3 ),
         'post_type' => 'desired_post_type'
);