我尝试创建一个自定义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>
答案 0 :(得分:1)
警告 query_posts()只是众多人查询数据库和生成帖子列表的一种方式。在决定使用query_posts()之前,请务必了解其缺点。
更改主循环 query_posts()用于更改主循环。 ...
辅助循环要创建辅助列表(例如,页面底部的相关帖子列表或侧栏小部件中的链接列表),请尝试创建WP_Query的新实例或使用get_posts()。
// 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'
);