Я создаю «цикл», который должен отображать страницы (не сообщения) в определенном порядке идентификаторов. То, что я делал до сих пор:
<?php $ids = array(434, 814, 3660, 3235, 99, 1002, etc.); add_filter('posts_orderby', 'enforce_specific_order'); function enforce_specific_order($orderby) { global $wpdb; $ids_as_text = join(",",$ids); return "FIND_IN_SET(".$wpdb->posts.".ID, '".$ids_as_text."') ASC"; } global $post; $args = array( 'posts_per_page' => 20, 'post_type' => 'page', 'post__in' => $ids ); $myposts = get_posts( $args ); foreach( $myposts as $post ) : setup_postdata($post); ?> <h2><?php the_title(); ?></h2> <?php endforeach; remove_filter( current_filter(), __FUNCTION__ ); wp_reset_postdata(); ?>
Я вижу, что названия страниц отображаются правильно, но не в том порядке, в котором я ожидаю, основываясь на $ids
.
Есть идеи?
Вместо этого вы должны использовать WP_Query
Что-то вроде этого:
$specific_order_pages_query_args = array( 'post_type' => 'page', 'post__in' => $ids, 'orderby' => 'post__in' ); $specific_order_pages_query = new WP_Query( $specific_order_pages_query_args );
Значение заказа post__in
является специальным значением для заказа с помощью поставленных идентификаторов post__in
Подробнее см. В разделе «Порядок в WP_Query» http://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters