Различные методы упорядочивания публикаций WordPress с использованием введенных идентификаторов

При работе с 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, вы можете легко добиться желаемого порядка записей. Поэкспериментируйте с этими методами и выберите тот, который лучше всего соответствует вашим конкретным требованиям.