首先,我尝试搜索并处理这个问题,但无法创建逻辑或方法。
我想展示users
和custom post type
将内容合并为单个loop
. 我可以得到custom post type
使用WP_Query
和users
使用WP_USER_Query
. 我可以同时显示它们。但这样一来,帖子和用户就不会按日期顺序混合。
我不确定我是否可以通过定制来实现这一点query
. 我在这方面的知识和经验有限。
有谁能帮我找到正确的方向,告诉我如何才能做到这一点?
编辑和更新
谢谢大家的评论,我相信我已经给出了我真正需要什么以及如何实现它的一半想法。因此,我将从想法/场景开始。
总体思路:
我有自定义的帖子类型,我们称之为“作业”和“项目”我在这个网站上有用户,让我们称他们为“老师”和“学生”多个教师可以将“作业”和“项目”分配给多个学生现在,我有一个“目录”页面,我希望在上面显示所有内容(老师、学生、作业和项目)在前端,我希望在缩略图视图中显示每个cpt条目和用户,如4x4网格现在,我创建了一个名为directory.php
并使用以下循环仅显示cptassignment
和projects
.
$args = array(
\'post_type\' => array(\'assigment\', \'project\'),
\'post_status\' => \'publish\',
\'order\' => \'ASC\'
);
$query = new WP_query( $args );
然后像这样循环
<?php if ( $query->have_posts() ) : ?>
<?php
while ( $query->have_posts() ) :
$query->the_post();
get_template_part( \'template-parts/content\', get_post_type() );
endwhile;
the_posts_navigation();
else :
get_template_part( \'template-parts/content\', \'none\' );
endif;
wp_reset_postdata();
?>
代码正在运行,但请关注语法错误(如果有)。现在是用户部分。我是这样写的。
$user = new WP_User_Query(array(\'role\'=> \'teacher\'));
if (!empty($user)) {
foreach ($user as $teacher) {
echo $teacher->first_name;
}
}
您可以了解我如何使用用户的基本想法。
The main Question
如何在post循环中合并用户,以便用户和帖子以4x4的网格显示,并按时间戳排序?
例如,下面是创建日期。
教A(2018年6月10日)教B(2018年6月12日)教C(2018年6月15日)分配1(2018年6月16日)分配2(2018年6月18日)教D(2018年6月20日)项目1(2018年6月22日)
然后我在4x4网格中显示如下。
设定A设定B螺柱C分配1分配2螺柱D项目1
如果还不清楚,请告诉我。
最合适的回答,由SO网友:Johansson 整理而成
当返回的类型为对象时,不能合并两个不同的查询,因为它们具有不同的方法和属性。相反,您可以将它们作为数组获取。然后可以合并它们并比较日期。为此,我将使用get_posts()
结束WP_Query()
, 和get_users()
结束WP_User_Query()
为了实现这一点。
代码本身应该是不言自明的。
// Get a list of users
$users = get_users ();
// Get an array of posts. Don\'t forget to set the args
$posts = get_posts();
// Let\'s merge these two
$users_posts = array_merge( $users, $posts );
// Now, let\'s sort both of them based on
// their dates. a user object holds the date
// as `user_registered`, while a post object
// holds the date as `post_date`. We use the
// usort() function to do so.
usort( $users_posts, "sort_users_and_posts" );
// Function to sort the array
function sort_users_and_posts( $a, $b ){
// Here\'s the tricky part. We need to get the
// date based on the object type, and then compare them.
// Get the date for first element
if( $a instanceof WP_User ){
$first_element_date = strtotime ( $a->user_registered );
} else {
$first_element_date = strtotime ( $a->post_date );
}
// Get the date for second element
if( $b instanceof WP_User ){
$second_element_date = strtotime ( $b->user_registered );
} else {
$second_element_date = strtotime ( $b->post_date );
}
// Now let\'s compare the dates
// If the dates are the same
if ( $first_element_date == $second_element_date ) return 0;
// If one is bigger than the other
return ( $first_element_date < $second_element_date ) ? -1 : 1;
}
// Now, we run a foreach loop and output the date.
// We need to check again whether the object is an
// instance of WP_Post or WP_User
foreach ( $users_posts as $object ) {
if( $object instanceof WP_Post ){
// This is a post
} else {
// This is a user
}
}