Извлечение пользовательского типа записи / таксономии с помощью шорткода Wordpress - PullRequest
0 голосов
/ 13 мая 2019

Я следовал документам Wordpress и создал эту пользовательскую функцию / шорткод, по какой-то причине я не могу заставить ее работать.

/** Get Stories Shortcode **/

    function register_shortcodes() {
        add_shortcode( 'stories', 'stories_func' );
    }
    add_action( 'init', 'register_shortcodes' );

    function stories_func( $atts ) {

        global $wp_query, $post;

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

        $loop = new WP_Query( array(
            'posts_per_page'    => 4,
            'post_type'         => 'stories',
            'orderby'           => 'rand',
            'tax_query'         => array (
                array (
                    'taxonomy'  => 'story_category',
                    'field'     => 'slug',
                    'terms'     => array (sanitize_title($atts['cat']))
                )
            )
        ));

        if( ! $loop->have_posts() ) {
            return false;
        }

        while( $loop->have_posts() ) {
            $loop->the_post();
            echo the_title();
        }

        wp_reset_postdata();
    }

Шорткод, который я использую: [Stories cat = "CareerИстории "]

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Шорткод должен всегда возвращать значение, а не отражаться в функции обратного вызова. Пожалуйста, проверьте следующий пример. Вывод шорткода собирается с использованием функции ob_get_contents() и возвращается в конце.

function register_shortcodes() {
    add_shortcode( 'stories', 'stories_func' );
}
add_action( 'init', 'register_shortcodes' );

function stories_func( $atts ) {

    global $wp_query, $post;

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


    $loop = new WP_Query( array(
        'posts_per_page'    => 4,
        'post_type'         => 'stories',
        'orderby'           => 'rand',
        'tax_query'         => array (
            array (
                'taxonomy'  => 'story_category',
                'field'     => 'slug',
                'terms'     => array (sanitize_title($atts['cat']))
                )
            )
        ));

    if( ! $loop->have_posts() ) {
        return false;
    }

    ob_start();

    while( $loop->have_posts() ) {
        $loop->the_post();
        the_title();
    }

    wp_reset_postdata();

    $output = ob_get_contents();
    ob_end_clean();
    return $output;
}
0 голосов
/ 13 мая 2019

Вот обновленный код.

function register_shortcodes() {
    add_shortcode( 'stories', 'stories_func' );
}
add_action( 'init', 'register_shortcodes' );

/**
 * Produtos Shortcode Callback
 * 
 * @param Array $atts
 *
 * @return string
 */
function stories_func( $atts ) {
    global $wp_query,
        $post;
   $terms = get_terms( array(
    'taxonomy' => 'story_category',
    'hide_empty' => false,
    ) );
   foreach($terms as $term)
   {
     $term_slugs[] = $term->slug;
   }
    $atts = $term_slugs;

    $loop = new WP_Query( array(
        'posts_per_page'    => 4,
        'post_type'         => 'stories',
        'orderby'           => 'rand',
        'tax_query'         => array( array(
            'taxonomy'  => 'story_category',
            'field'     => 'slug',
            'terms'     => $atts
        ) )
    ) );

    if( ! $loop->have_posts() ) {
        return false;
    }

    while( $loop->have_posts() ) {
        $loop->the_post();
        echo the_title();
    }

    wp_reset_postdata();
}

Проверено и хорошо работает

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