как получить фильтрацию сообщений нестандартного типа по post_type, posts_per_page и идентификаторам - PullRequest
0 голосов
/ 12 июня 2018

В своем шорткоде я хочу получать сообщения от моего custom_type_post, но фильтруя их по идентификаторам, post_type и posts_per_page

например [myshortcode type="my_custom_type_post"] - чтобы показать все сообщения в my_custom_type_post

или [myshortcode type="my_custom_type_post" no_of_posts="3"]- чтобы показать только 3 сообщения

или [myshortcode type="my_custom_type_post" no_of_posts="1" id="112"] - чтобы показать это конкретное сообщение

Вот мой код.Это работает, когда я только отправляю type и posts_per_page, а идентификаторы НО не работают, когда я хочу отобразить все сообщения или с no_of_posts

// extracting values from shortcode
       extract( shortcode_atts( array (
        'type' => '',
        'no_of_posts' => '',
        'id' => ''
    ), $atts ) );

   $id_array = array_map('intval',explode(',',$id));

$args = array(
    'post_type' => $type,
    'posts_per_page' => $no_of_posts,
    'post__in' => $id_array
);

и затем передаю значения в wp_query

$query = new WP_Query( $args );
if( $query->have_posts() ){

/*printing out results*/

}

1 Ответ

0 голосов
/ 12 июня 2018

Вы должны использовать условный код, как показано ниже

extract( shortcode_atts( array (
        'type' => '',
        'no_of_posts' => '',
        'id' => ''
    ), $atts ) );

$args['post_type'] = $type;

if($no_of_posts) {
    $args['posts_per_page'] = $no_of_posts;
} else {
    $args['posts_per_page'] = '-1';
}

if($id) {
    $args['post__in'] = array_map('intval',explode(',',$id));
}

Я бы просто установил аргументы на основе условия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...