我也尝试过类似的方法(嗯,略有不同,我所做的是尝试创建一个时间线,在同一时间线中显示帖子和评论)。。。
合并这两个数组并不容易,因为post对象与link对象具有完全不同的属性。如果要这样做,必须对返回的响应运行数组映射get_bookmarks
使这些对象中的每一个都符合$post对象的结构;然后合并这两个数组,最后使用您自己的比较函数对它们进行排序。头痛得厉害,收获甚微。
如果您刚刚开始使用此功能,为什么不将链接设置为自定义帖子类型,以便可以在一个查询中合并链接和帖子?
或者更好的是,如果您可以使用3.1的开发版本,请将您的链接设置为帖子format! 这样就根本不会干扰查询,它只会立即对您起作用。
Edit: I originally entered this code in a separate answer. I\'m following Jan\'s recommendation to combine my answers into one so that its more clear.
好吧,这确实是不可靠的,我重申我不建议你这样做,但如果你必须这样做,这应该为你做:
$links = get_bookmarks(\'show_updated=true\');
/* Map the properties of the link to the structure of a post object */
$linkposts = array_map( \'link2postobj\', $links );
function link2postobj( $obj ) {
$post_object = array(
\'post_name\' => $obj->link_name,
\'post_content\' => \'<a href="\'.$obj->link_href.\'" >\'.
$obj->link_name.\'</a><p>\'.
$obj->link_description.\'</p>\', // the "content"
\'post_author\' => $obj->link_owner,
\'post_date\' => $obj->link_updated,
\'post_status\' => \'link\', // just a tag to mark this as a link
\'guid\' => $obj->link_href );
return (object)$post_object;
}
/* Merge links returned with posts in query */
global $wp_query;
$posts = array_merge( $wp_query->posts, $linkposts );
/* Sort together by your function (this uses link_updated date to merge in the timeline.
Note that link_updated is not a reliable property to depend on. */
usort( $posts, \'sortbydate\' );
function sortbydate( $a, $b ) {
return ( strtotime($a->post_date) > strtotime($b->post_date) );
}
/* now just loop through your timeline */
foreach ( $posts as $post ) :
if ( \'link\' == $post->post_status ) {
// template for links here
} else {
setup_postdata( $post );
// template for regular posts here
}
endforeach;
除了我预见到的其他问题外,我注意到link\\u updated字段不是很可靠(我数据库中的许多链接都返回0作为link\\u updated值)。因此,您可能需要查看您拥有的数据,并想出一个不同的函数来对链接和帖子进行排序。
不过,认真地说,可以考虑站在最前沿,将所有链接迁移到posts with the "link" format. 我认为对于你正在尝试做的事情来说,这更有意义,并且运行脚本和为每个链接创建新帖子所需的时间将大大少于维护这样的格式所需的时间。