如何将类别选项添加到短代码中

时间:2017-12-05 03:30:59

标签: php wordpress shortcode

我是创建wordpress短代码的新手,并且只是按照我想要的方式工作。缺少特定的东西。目前,我可以在任何页面上添加以下内容 - [儿童],并从自定义帖子类型"儿童"中提取所有帖子的查询。我想添加选项以在短代码中添加类别ID - 类似于[children category =" 8"]这是我到目前为止的代码:

add_shortcode( 'children', 'display_custom_post_type' );

function display_custom_post_type(){
    $args = array(
'post_type' => 'children',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
    );
    $string = '';
    $query = new WP_Query( $args );
    if( $query->have_posts() ){
        while( $query->have_posts() ){
            $query->the_post();
            $string .= '<div id="childWrapper"><div id="childImage"><a href="' . get_permalink() . '">' . get_the_post_thumbnail() . '</a></div><div style="clear: both;"></div><div id="childName">' . get_the_title() . '</div><div style="clear: both;"></div></div>';
        }
    }
    wp_reset_postdata();
    return $string;
}

辅助 - 它可以显示多个类别的帖子,但仅限于每个类别中的帖子。例如,显示一份儿童名单,这些儿童属于所需的重症监护和手术类别。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您应该从WordPress Codex中引用Shortcode function。假设您的分类名称是类别,我在您当前的代码中进行了一些更改,它应该根据您的要求工作。

/**
 *  [children category="5,7,8"]
 */
add_shortcode( 'children' , 'display_custom_post_type' );

function display_custom_post_type($atts) {

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

  //If category is multiple: 8,9,3
  $categories  = explode(',' , $atts['category']);

    $args = array(
            'post_type'     => 'children',
            'post_status'   => 'publish',
            'orderby'       => 'title',
            'order'         => 'ASC',
            'posts_per_page'=> -1,
            'tax_query'     => array( array(
                                'taxonomy'  => 'category',
                                'field'     => 'term_id',
                                'terms'     => $categories
                            ) )
        );

        $string = '';
        $query = new WP_Query( $args );

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

        while( $query->have_posts() ){
            $query->the_post();
            $string .= '<div id="childWrapper"><div id="childImage"><a href="' . get_permalink() . '">' . get_the_post_thumbnail() . '</a></div><div style="clear: both;"></div><div id="childName">' . get_the_title() . '</div><div style="clear: both;"></div></div>';
        }
        wp_reset_postdata();

        return $string;
}