0
106
2015-07-20

WordPress - Функциия wp_parse_id_list() для правильно очищенного массива идентификаторов записей

Функция wp_parse_id_list() WordPress которая принимает массив или строку, содержащую идентификаторы записей, и возвращающая очищенный массив идентификаторов записей.
Понравилась страница? Поставь свою оценку!
PLUGIN_STAR_RATINGS.SCORE_TEXTPLUGIN_STAR_RATINGS.VOTES_TEXT

Обзор функций

wp_parse_id_list( array|string $list )

$ list (array) (Обязательный) Список идентификаторов.

Возврат:(массив) Готовый массив идентификаторов.

Образец использования

Давайте начнем с простого массива идентификаторов записей:

$list = array( 1, 13, '11', 13 );

На первый взгляд вы заметите, что один из этих идентификаторов является строкой и что 13 дублируется. Итак, давайте запустим список через

wp_parse_id_list( $list );

Результат прохождения нашего списка таков :

 array( 1, 13, 11 )

Как видите, результатом является массив целых чисел с совершенно уникальными значениями.

Вариант использования: MySQL IN Clause

Одним из отличных вариантов использования этой функции является пример на MySQL IN. Фактически, это основное использование в ядре WordPress.

Вот пример, извлеченный непосредственно из ядра WordPress:

$where[] = 'post_author IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['post_author__in'] ) ) . ' )';

Примечание. Это будет одинаково хорошо работать с идентификаторами записей, идентификаторами пользователей, комментариями или любым другим контентом, где требуется массив уникальных целых чисел.

Вариант использования: список идентификаторов шорткодов

Еще один вариант использования этой функции - это когда у вас есть шорткод, который принимает один или несколько идентификаторов сообщений. Например:

wp_parse_id_list ()    add_shortcode( 'my_shortcode', function ( $atts, $content ) {

    $atts = shortcode_atts( array( 'post_ids' => '' ), $atts );

    $query = new WP_Query( array(
        'post__in'            => array_filter( wp_parse_id_list( $atts['post_ids'] ) ),
        'ignore_sticky_posts' => true,
    ) );

    $output = '';;
    if ( $query->have_posts() ) {
        $output .= '<p>';
        while ( $query->have_posts() ) {
            $query->the_post();
            $output .= esc_html( $query->post->post_title ) . '<br />';
        }
        $output .= '</p>';
    }

    return $output;

} );

Теперь пользователь может использовать ваш шорткод так:

[ my_shortcode post_ids = "1" ] или с несколькими идентификаторами, например:

[ my_shortcode post_ids = "1,2,3" ] или, если пользователь не смог использовать запятые и использовал пробелы, это также сработало бы:

[ my_shortcode post_ids = "1 2 3" ] или, если пользователь смешал подходы или даже добавил слишком много пробелов, это также сработало бы:

[ my_shortcode post_ids = "1, 2 3 4" ] или, если пользователь дублирует идентификатор в списке, он будет автоматически удален:

[ my_shortcode post_ids = "1 2 3 3" ]

Есть только два сценария, в которых не удастся правильно очистить список идентификаторов. wp_parse_id_list()

Первый - когда пользователь добавляет начальные или конечные пробелы в список идентификаторов в виде строки:

[ my_shortcode post_ids = "1 2 3 " ]Это добавит 0 к массиву, который, очевидно, не является действительным идентификатором записи.

Во-вторых, когда пользователь явно добавляет 0 в список идентификаторов:

[ my_shortcode post_ids = "0 1 2 3" ] По этой причине я не использую сам по себе, но использую как указано здесь:

array_filter( wp_parse_id_list( $post_ids ) )

Это гарантирует, что 0 никогда не попадет в список идентификаторов.




Статья была переведена для блога TechBlog.SDStudio.top

Источник: wpscholar.com