При работе с WordPress могут возникнуть случаи, когда вам необходимо получить сообщения в определенном порядке на основе заданного набора введенных идентификаторов. В этой статье мы рассмотрим несколько методов достижения этой цели и приведем примеры кода для каждого подхода.
Метод 1: использование параметра post__in в WP_Query
$ids = array(1, 3, 2, 5); // Inputted post IDs
$args = array(
'post_type' => 'post',
'post__in' => $ids,
'orderby' => 'post__in'
);
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
// Display post content here
}
Метод 2: использование параметров orderby и post__in в get_posts()
$ids = array(1, 3, 2, 5); // Inputted post IDs
$args = array(
'post_type' => 'post',
'post__in' => $ids,
'orderby' => 'post__in'
);
$posts = get_posts($args);
foreach ($posts as $post) {
// Display post content here
}
Метод 3: собственный SQL-запрос
global $wpdb;
$ids = array(1, 3, 2, 5); // Inputted post IDs
$ids_string = implode(',', $ids);
$query = "SELECT * FROM $wpdb->posts WHERE ID IN ($ids_string) ORDER BY FIELD(ID, $ids_string)";
$posts = $wpdb->get_results($query);
foreach ($posts as $post) {
// Display post content here
}
Метод 4. Использование хука pre_get_posts
function custom_post_order($query) {
if ($query->is_main_query() && is_home()) {
$ids = array(1, 3, 2, 5); // Inputted post IDs
$query->set('post__in', $ids);
$query->set('orderby', 'post__in');
}
}
add_action('pre_get_posts', 'custom_post_order');
Это несколько способов упорядочить записи WordPress на основе введенных идентификаторов. Независимо от того, предпочитаете ли вы использовать WP_Query, get_posts(), пользовательские SQL-запросы или ловушку pre_get_posts, вы можете легко добиться желаемого порядка записей. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует вашим конкретным требованиям.