orderby在wordpress/sql中默认为desc

sqxo8psd  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(545)

我在循环中使用foreach和setup\u postdata来显示post。$args排序是按“post\u in”进行的,但输出是按sql中post id的默认desc顺序显示的。
以下是输出:
在args数组之前([0]=>229[1]=>226[2]=>228[3]=>227[4]=>225)
在args数组之后([post\u type]=>movies[post\u in]=>array([0]=>229[1]=>226[2]=>228[3]=>227[4]=>225)[orderby]=>post\u in)
查询转储

string(275) "
SELECT SQL_CALC_FOUND_ROWS wpxc_posts.ID 
  FROM wpxc_posts 
 WHERE 1=1 
   AND wpxc_posts.post_type = 'movies' 
   AND (wpxc_posts.post_status = 'publish' 
 OR wpxc_posts.post_status = 'acf-disabled' 
 OR wpxc_posts.post_status = 'private') 
 ORDER 
    BY wpxc_posts.post_date DESC 
 LIMIT 0, 10"

实际序列
229 228 227 226 225
代码如下:

<?php
$postidsstring = get_field('post_ids_to_be_included');
$postidsarray = explode(", ",$postidsstring);
echo "Before args <br>";
print_r($postidsarray);
$args = array(
    'post_type'=> 'movies',
    'post_in' => $postidsarray,
    'orderby' => 'post_in'
);
$myposts = get_posts($args);
?><br><?php
echo "After args <br>";
print_r($args);
echo "<br>Query dump<br>";
$query = new WP_Query($args);
var_dump($query->request);
echo "<br> Actual Sequence";
foreach ( $myposts as $post ) : 
global $post;
setup_postdata( $post ); ?>
<li>
<?php echo get_the_ID(); ?>
</li>   
<?php endforeach;
?>

在这种情况下,请建议如何控制分拣。

uplii1fm

uplii1fm1#

您可以在发布的查询中看到,它不是按ID排序(甚至不是按ID过滤),而是按 post_date :

ORDER BY wpxc_posts.post_date DESC

我认为这个问题是一个双重下划线-注意 post_in 不在规范中 post__in 是。。尝试改用此选项:

$args = array(
  'post_type'=> 'movies',
  'post__in' => $postidsarray,
  'orderby' => 'post__in'
);

相关问题