Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I've just had one questions solved over here: 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.

share|improve this question
1  
If the other question was solved you should accept the answer. –  Bainternet May 12 '11 at 5:36
    
Indeed, marking solutions is a matter of respecting the invested time into your task by other users. –  kaiser May 12 '11 at 11:04
    
Thanks guys, I have accepted first answer, my fault for not reading the faqs properly. Still kinda mean to vote down my valid question though as it may help others. –  maikunari May 12 '11 at 13:34

1 Answer 1

up vote 3 down vote accepted

Take a look at 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
share|improve this answer
    
Thanks very much Bainternet, will give this a try right away! –  maikunari May 12 '11 at 13:35
    
I'm coming up with a fatal errror: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 17301490 bytes) in \wp-content\themes\ECSE\functions\inventory-shortcode.php on line 30. Any idea what might be the problem? btw, this is line 30 "$output .= '<div class="cat-post-list">';" –  maikunari May 12 '11 at 16:56
    
Im guessing, running out of memory –  Bainternet May 12 '11 at 17:22
    
Do you think that could be caused by the slow Go Daddy hosting my client is using? –  maikunari May 12 '11 at 17:42
    
I think it has to do with server memory settings –  Bainternet May 12 '11 at 18:46

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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