4

嗨,我在高级自定义字段中有一个帖子对象字段,我想返回多个帖子,按日期排序。我有来自这些帖子的自定义字段数据返回正常,但帖子对象按帖子 ID 的顺序返回。我希望在帖子发布之日之前订购它们。

<?php $post_objects = get_field('exhibitions');

if( $post_objects ): ?>

 <?php foreach( $post_objects as $post_object): ?>

 <a href="<?php echo get_permalink($post_object->ID); ?>">
 <div style="display: inline-block">

  <? if( get_field( 'title', $post_object->ID) ): ?>
   <em><?php the_field('title', $post_object->ID); ?></em><br>
  <?php endif; ?>

  <? if( get_field( 'dates', $post_object->ID) ): ?>
   <?php the_field('dates', $post_object->ID); ?>
  <?php endif; ?>

 </div>
 </a>
 <br><br>

 <?php endforeach; ?>

<?php endif; ?>

这将返回在调用它的帖子的帖子对象字段中选择的每个帖子的文本自定义字段“标题”和“日期”。

我希望帖子按发布日期的顺序返回这里。

有任何想法吗?

4

3 回答 3

4

@Michael Ray-Von - 你的答案有效,但它涉及从数据库中获取相同的数据两次。相反,您可以只对初始 ACF 查询中返回的发布数据进行排序,而不是运行额外的查询。( post_date 作为字符串返回,因此您可以对其进行 strcmp ):

<?php
// get the posts from ACF
$custom_posts = get_field('your_posts_field');

// sort the posts by post date, but you can also sort on ID or whatever
usort($custom_posts, function($a, $b) {
    return strcmp($b->post_date,$a->post_date);
});

// write them out
foreach ($custom_posts as $post) :  setup_postdata($post); ?>

        <article>
                <h1><?php the_title();?></h1>
                <?php the_excerpt(); ?>     
        </article>

<?php
endforeach;
wp_reset_query();
?>

对这个答案的排序提示:https ://stackoverflow.com/a/10159521

于 2014-02-03T12:04:29.007 回答
3

好的,我已经弄清楚了!

与其调用get_fieldas post_objects,不如将其调用为变量,只是为了获取相关帖子的 ID,然后在数组中将其用于$argsa get_posts。这样您就可以get_posts在运行循环之前访问所有数组选项。

<?php 

$ids = get_field('exhibitions', false, false);

$args = array(
  'post__in' => $ids,
  'orderby' => 'post_date',
);

$post_objects = get_posts( $args );

if( $post_objects ): ?>

<?php foreach( $post_objects as $post_object): ?>

  <a href="<?php echo get_permalink($post_object->ID); ?>">
  <div style="display: inline-block">

  <? if( get_field( 'title', $post_object->ID) ): ?>
   <em><?php the_field('title', $post_object->ID); ?></em><br>
  <?php endif; ?>

  <? if( get_field( 'dates', $post_object->ID) ): ?>
   <?php the_field('dates', $post_object->ID); ?>
  <?php endif; ?>

  </div>
  </a>
  <br><br>

<?php endforeach; ?>

<?php endif; ?>

谢谢你的帮助!

感谢: http: //support.advancedcustomfields.com/discussion/5846/adding-args-to-post_objects-get_field/p1找到了我的答案

于 2013-05-08T18:26:46.550 回答
0
<?php $post_objects = get_field('exhibitions');
$args = array (
    'orderby'=>'date',
);
$the_query = new WP_Query( $args );
if($the_query->have_posts()) { 
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 
        <a href="<?php echo get_permalink($post_object->ID); ?>">
 <div style="display: inline-block">

<? if( get_field( 'title', $post_object->ID) ): ?>
<em><?php the_field('title', $post_object->ID); ?></em><br>
<?php endif; ?>

<? if( get_field( 'dates', $post_object->ID) ): ?>
<?php the_field('dates', $post_object->ID); ?>
<?php endif; ?>`  </div>
</a>
<br><br>
endwhile;
    wp_reset_postdata();
}

我还没有测试过,但它应该适合你,几乎没有适应!

于 2013-05-08T05:05:42.063 回答