我有一个自定义帖子'works',我使用一个插件,客户端可以重新订购它。
我能够通过menu_order获得下一篇文章,但是我在接下来的三篇文章中遇到了很多麻烦。
例如,
0 1 2 3 4 5
我还需要它循环,如果它是在结束,所以如果我在第4后,我需要得到5,0,1。
有人会有任何想法吗?
我是PHP的新手,我试图找到一种混乱的方法,但它无法正常工作。
$counter = 0;
$theID = $post->ID;
for ($i=0; $i < 3; $i++) {
if ($nextID !== 0) {
$id = get_post_field('menu_order', $nextID, true);
$args = array(
'posts_per_page' => -1,
'menu_order' => $id,
'post_type' => 'work',
'post_status' => 'publish'
);
$posts_array[] = get_posts( $args );
} else {
$args = array(
'posts_per_page' => -1,
'menu_order' => $counter,
'post_type' => 'work',
'post_status' => 'publish'
);
$posts_array[] = get_posts( $args );
$counter++;
}
}
echo json_encode($posts_array);
答案 0 :(得分:0)
你有几个问题: 1. $ nextID在初始化之前使用(或未复制) 2. get_post_field()使用post的id作为param。请看这个链接:https://codex.wordpress.org/Function_Reference/get_post_field
我会发帖子,增加$ counter而不是,如果它超过帖子数量($ postCount),将其设置为0所以,如果$ counter == 5和$ totalCount == 6,就像在你的例子中一样,将获得5并转到0。
global $post;
$theID = $post->ID;
$counter = get_post_field('menu_order', $theID);
$postsCount = wp_count_posts('work');
$posts_array = [];
for ($i=0; $i < 3; $i++) {
if($counter+1 >= $postCounts)
$counter = 0;
$args = array(
'posts_per_page' => -1,
'menu_order' => $counter,
'post_type' => 'work',
'post_status' => 'publish'
);
array_push($posts_array,get_posts( $args ));
$counter++;
}
echo json_encode($posts_array);
我还没有测试过,但我希望它有所帮助。