我有几个配置文件,允许用户发布我想要在一个长Feed中显示的新闻,按日期顺序排序。
此时循环显示每个配置文件,列出该配置文件中的新闻然后移至下一个配置文件,列出其新闻等。它并没有混合起来。
如何将每个个人资料中的所有新闻混合在一起并按日期订购?
<?php global $post;
$args = array('numberposts' => -1);
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
<?php while(the_repeater_field('news')): ?>
<div class="social-news-item">
<p class="social-news"><?php the_sub_field('news_description'); ?></p>
<p class="social-company"><?php echo the_title(); ?></p>
</div>
<?php endwhile; ?>
<? endforeach; wp_reset_postdata(); ?>
日期字段为:
<?php the_sub_field('date'); ?>
答案 0 :(得分:3)
如果您想以编程方式更改订单,请查看各种array sorting functions in PHP,尤其是
uasort()
- 使用用户定义的比较函数对数组进行排序并维护索引关联uksort()
- 使用用户定义的比较函数按键对数组进行排序usort()
- 使用用户定义的比较函数按值对数组进行排序但是对于wordpress checkout这个http://codex.wordpress.org/Template_Tags/get_posts
给定链接中的示例:
默认:强>
<?php
$args = array(
'posts_per_page' => 5,
'numberposts' => 5,
'offset' => 0,
'category' => '',
'orderby' => 'post_date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'post_mime_type' => '',
'post_parent' => '',
'post_status' => 'publish',
'suppress_filters' => true );
?>
使用:强>
<?php $posts_array = get_posts( $args ); ?>
这可能对你有所帮助。
答案 1 :(得分:2)
正如我在评论中所写,我不知道wordpress,也许有些事情是错的,但这个想法可能没问题。
如果可能,您可以先将所有帖子放在一起,然后对它们进行排序。
要对它们进行分组,请使用一个临时数组来获取对象。所以不要输出你的div
,而是在数组中“缓冲”它们。
例如,如果数组名称为$posts
,则可以在foreach
循环中执行:
(我希望你错过了the_sub_field('news_description');
echo
$var = &$posts[]; // this creates a new item in array, and $var is this element
$var->description = the_sub_field('news_description'); // *****
$var->title = the_title();
$var->date = ... // it is important, I don't know if you have it
,在这种情况下它将无法正常工作)
function cmp($a, $b){
if($a->date > $b->date)
return 1;
elseif($a->date < $b->date)
return -1;
else
return 0;
}
所以最后你的数组将包含所有用户(或个人资料)的所有帖子。现在使用usort function对其进行排序。您需要编写自己的排序功能,在手册中它是“cmp”,所以我使用相同的名称:
usort($posts, 'cmp');
并将其命名为
foreach
然后你需要在另一个{{1}}循环中输出数组。
但是,正如我所说,我不知道wordpress是否允许这样做。
答案 2 :(得分:1)
当你提到'个人档案'时,我假设你的意思是'作者'。
在$ myposts中有所有帖子
$myposts = get_posts( $args );
你用
迭代它们foreach( $myposts as $key => $post )
(注意我添加了$ key)
现在,您可以使用日期作为键创建自己的数组
$my_array[$myposts[$key]->post_date][] = ...whatevever you want in the end
随意添加您想要显示的数据。我们以帖子的作者和标题为例:
$the_item[$myposts[$key]->post_author] = $myposts[$key]->post_title;
$my_array[$myposts[$key]->post_date][] = $the_item;
这将产生一个如下所示的数组:
[2007-11-19 22:46:37] => Array ( [0] => Array ( [3] => Title [2] => Another title ) ) [2007-11-11 11:11:11] => Array ( [0] => Array ( [3] => Yet another title [2] => Foo ) [1] => Array ( [3] => Bar [2] => Yuck )
所有帖子现在按日期排序,不同作者的帖子“混合”。随意使用任何排序功能(如上所述)。您可能希望使用shuffle()添加一点随机性... 为了显示帖子,您将采用相反的方式:迭代创建的数组并打印您包含的数据(例如作者,标题,内容等)。 作为参考,这是post对象的样子:
myposts:Array
(
[0] => stdClass Object
(
[ID] => 1455
[post_author] => 3
[post_date] => 2013-03-27 22:16:33
[post_date_gmt] => 2013-03-27 22:16:33
[post_content] => Content
[post_title] => Title
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => title
[to_ping] =>
[pinged] =>
[post_modified] => 2013-03-27 22:16:42
[post_modified_gmt] => 2013-03-27 22:16:42
[post_content_filtered] =>
[post_parent] => 0
[guid] => http://www.abc.com/wordpress/?p=1455
[menu_order] => 0
[post_type] => post
[post_mime_type] =>
[comment_count] => 0
[member_access_visibility] => default
[filter] => raw
)
希望这可以帮助您解决问题!
干杯
JD
答案 3 :(得分:0)
您只需要一个get_posts()
函数调用。
创建一个由字符串分隔的所有用户ID的字符串。
现在您可以将它与您的订单一起添加到您的args中:
$args = array(
'numberposts' => -1,
'author' => '1,2,3,4,5',
'orderby' => 'date' // date is the default anyway, so shouldn't matter
);
然后,您的get_posts()
来电将包含这些作者的所有帖子。
HTH