自定义简码提取自定义帖子类型/类别

时间:2019-05-30 10:33:45

标签: php wordpress

我创建了一个带有类别的自定义帖子类型,称为“故事”。有5个类别,其中之一是“培育”。

我想将所有带有“培育”类别的自定义“故事”帖子拉入页面,目前我的函数中包含此信息。php

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

function stories_function($atts) {
    global $wp_query,
        $post;

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

    $loop = new WP_Query( array(
        'posts_per_page'    => 3,
        'post_type'         => 'stories',
        'orderby'           => 'rand',
        'order'             => 'ASC',
        'tax_query'         => array( array(
            'taxonomy'  => '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();
        echo the_content();
    }

    wp_reset_postdata();
}

而我正在使用的简码是[story category =“ fostering”],但是什么也没有被拉进去,我在这种自定义帖子类型中使用了“ Fostering”类别来创建伪数据。

enter image description here

1 个答案:

答案 0 :(得分:1)

在错过通过cat => Fostering的情况下尝试使用此代码,并确保Fostering是类别的子弹,否则请通过该类别的正确子弹

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

function stories_function($atts) {
    global $wp_query,
        $post;

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

    $loop = new WP_Query( array(
        'posts_per_page'    => 3,
        'post_type'         => 'stories',
        'orderby'           => 'rand',
        'order'             => 'ASC',
        '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();
        echo the_content();
    }

    wp_reset_postdata();
}