1

I have created a custom post type called "faq". The custom post type uses categories. I have created a shortcode [faq] that displays all the faq posts.

What I would like to do is add an attribute to the shortcode that specifies an faq category. So instead of using the shortcode [faq] it would be something like [faq category="travel"] and it would only display the posts from the "travel" category.

I am using the following code for the shortcode at the moment. I just need to add the category attribute somehow:

add_shortcode('faq', function() {

    $posts = get_posts(array(  //Get the FAQ Custom Post Type
        'numberposts' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'post_type' => 'faq',
    ));

    $faq  = '<div id="faq-accordion">'; //Open the container
    foreach ( $posts as $post ) { // Generate the markup for each Question
        $faq .= sprintf(('<h3><a href="">%1$s</a></h3><div>%2$s</div>'),
            $post->post_title,
            wpautop($post->post_content)
        );
    }
    $faq .= '</div>'; //Close the container

    return $faq; //Return the HTML.
});

2 Answers 2

2
add_shortcode( 'faq', 'wpse105856_shortcode_callback' );

function wpse105856_shortcode_callback( $atts ) {
    extract( shortcode_atts( array(
        'category' => ''
    ), $atts ) );

    $args = array(
        'numberposts' => -1,
        'orderby' => 'menu_order',
        'order' => 'ASC',
        'post_type' => 'faq'
    ));

    if ( ! empty( $category ) ) {
        $args['category_name'] = $category;
    }

    $posts = get_posts( $args );

    $faq  = '<div id="faq-accordion">'; //Open the container
    foreach ( $posts as $post ) { // Generate the markup for each Question
        $faq .= sprintf(('<h3><a href="">%1$s</a></h3><div>%2$s</div>'),
            $post->post_title,
            wpautop($post->post_content)
        );
    }
    $faq .= '</div>'; //Close the container

    return $faq; //Return the HTML.
});

Note: Even though the WP_Query parameter is called category_name, it expects to be given a slug.

0

I have created a custom post type called "whiz_qt_quote". The custom post type uses categories. I have created a shortcode for all the post [quote].

What I would like to display one category post on one page. So instead of using the shortcode [quote], it would be something like [quote category="motivation"] and it would only display the posts from the "motivation" category.

I am using the following code for the shortcode at the moment. I just need to add the category attribute somehow:

if (!defined('ABSPATH')) exit;

function whiz_qt_feed_shortcode( $atts ) {
    extract( shortcode_atts( array( 'limit' => 3, 'type' => 'whiz_qt_quote','category' => ''), $atts ) );
    global $paged;
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;  

        $args = query_posts(  array ( 
        'posts_per_page' => $limit, 
        'post_type' => $type, 
        'order' => 'ASC', 
        // 'orderby' =>'menu_order', 
        'paged' => $paged ,
        'category_name' => $category) );
        if ( ! empty( $category ) ) {
        $args['category_name'] = $category;
    }
$list = ' ';   
while ( have_posts() ) { the_post();

    $list .= '<article class="listing-view clearfix">' 
    . '<div class="listing-content">' 
    . '<h3><a href="' . get_permalink() . '">' . get_the_title() . '</a></h3>' 
    .'<p>' . get_the_excerpt() . '</p>'
    . '</div>'
    . '</article>';
}

return 
'<div class="listings clearfix">' 
. $list 
. '<div class="nav-previous">' . get_next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts' ) ) . '</div>'
. '<div class="nav-next">' . get_previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>' ) ) . '</div>'
. '</div>' .
wp_reset_query();

}
add_shortcode( 'quote', 'whiz_qt_feed_shortcode' );
?>`

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.