Отображение произвольного типа записей с помощью шорткода

8 апр. 2015 г., 09:35:19
Просмотры: 38.6K
Голосов: 5

Я создал произвольный тип записей для моей темы WordPress и страницу, где эти записи отображаются. Но кто-нибудь знает, как создать шорткод, который будет отображать записи произвольного типа?

1
Комментарии

Возможно да, но что вы уже пробовали сделать для решения этой проблемы и где именно у вас возникли сложности?

Pieter Goosen Pieter Goosen
8 апр. 2015 г. 10:15:32
Все ответы на вопрос 1
1

Думаю, ваш вопрос в основном заключается в том, как запрашивать записи пользовательского типа записей в шорткоде. Вам стоит ознакомиться с разделом WP_Query в WordPress: https://codex.wordpress.org/Class_Reference/WP_Query

В моем примере кода я создаю шорткод, который отображает заголовки последних опубликованных записей типа 'my-custom-post-type':

<?php
    add_shortcode( 'shortcodename', 'display_custom_post_type' );

    function display_custom_post_type(){
        $args = array(
            'post_type' => 'my-custom-post-type',
            'post_status' => 'publish'
        );

        $string = '';
        $query = new WP_Query( $args );
        if( $query->have_posts() ){
            $string .= '<ul>';
            while( $query->have_posts() ){
                $query->the_post();
                $string .= '<li>' . get_the_title() . '</li>';
            }
            $string .= '</ul>';
        }
        wp_reset_postdata();
        return $string;
    }
?>

Поскольку шорткод выполняется внутри цикла, вам следует использовать wp_reset_postdata() после завершения запроса, чтобы основной цикл снова работал как ожидается. Подробнее об этой функции можно узнать здесь: https://codex.wordpress.org/Function_Reference/wp_reset_postdata

Надеюсь, это даст вам хороший старт.

8 апр. 2015 г. 10:14:08
Комментарии

следует использовать wp_reset_postdata после вторичного цикла. wp_reset_query необходим только для восстановления глобальной переменной $wp_query, которая в данном случае не перезаписывалась. wp_reset_query также вызывает wp_reset_postdata внутри себя, поэтому он работает и здесь, но его использование избыточно.

Milo Milo
11 февр. 2016 г. 18:15:58