Question:

How to call custom taxonomy categories with shortcodes

Jeremiah: 2 weeks ago

I've just had one questions solved over here: How to display posts from a single category within a custom taxonomy (https://wordpress.stackexchange.com/questions/17016/how-to-display-posts-from-a-single-category-within-a-custom-taxonomy)

Now I'm wondering how to take this code:

<?php
    $args = array(
        'posts_per_page' => 1,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( 
                    'bulk-racks' 
                )
            )
        )       
    );
query_posts( $args ); while ( have_posts() ): the_post();

// do stuff here
?>

<?php endwhile; ?>

and call it using shortcodes, for example to display the bulk-racks category by using this or something similar [inventory-category="bulk-racks"]

I know how to create a basic shortcode but I don't know how to write the function that would return the posts based on the shortcode category name input.

Once again any help would be greatly appreciated.

Answer:
Sophia: 2 weeks ago

Take a look at category post shortcode (http://wordpress.org/extend/plugins/category-post-shortcode/) to get an idea and here is the plugin with minor modifications to call your post type and taxonomy:

// Taxonomy category shortcode
function cat_func($atts) {
    extract(shortcode_atts(array(
            'class_name'    => 'cat-post',
            'totalposts'    => '-1',
            'category'      => '',
            'thumbnail'     => 'false',
            'excerpt'       => 'true',
            'orderby'       => 'post_date'
            ), $atts));

    $output = '<div class="'.$class_name.'">';
    global $post;
    $args = array(
        'posts_per_page' => $totalposts, 
        'orderby' => $orderby,
        'post_type' => 'inventory',
        'tax_query' => array(
            array(
                'taxonomy' => 'inventory-category',
                'field' => 'slug',
                'terms' => array( $category)
            )
        ));
    $myposts = NEW WP_Query($args);


    while($myposts->have_posts()) {
        $myposts->the_post();
        $output .= '<div class="cat-post-list">';
        if($thumbnail == 'true') {
        $output .= '<div class="cat-post-images">'.get_the_post_thumbnail($post->ID, 'thumbnail').'</div>';
        }
        $output .= '<div class="cat-content"><span class="cat-post-title"><a href="'.get_permalink().'">'.get_the_title().'</a></span>';
        if ($excerpt == 'true') {
            $output .= '<span class="cat-post-excerpt">'.get_the_excerpt().'</span>';
        }
        $output .= '</div>
            <div class="cat-clear"></div>
        </div>';
    };
    $output .= '</div>';
    wp_reset_query();
    return $output;
}
add_shortcode('inventory-category', 'cat_func');

usage:

just put this shortcode in your post or pages

[inventory-category totalposts="3" category="bulk-racks" thumbnail="true" excerpt="true" ]
  • totalposts - your total number of post to display. default is -1
  • category - category slug. use comma , for multiple slugs
  • thumbnail - set true if you want to display thumbnail. default is false
  • excerpt - set true if you want to display excertp. default is true
  • orderby - your post will order by . default post_date . check http://codex.wordpress.org/Template_Tags/get_posts for detail