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 have this code below to display wp post based on category but what i want to display wp custom post called 'wiki' based on its category. CPT wiki is from plugin, so i think already defined.

class Pyre_Homepage_1col_Widget extends WP_Widget {

function Pyre_Homepage_1col_Widget()

{
    $widget_ops = array('classname' => 'pyre_homepage_1col', 'description' => 'Homepage 1-column recent posts widget.');
    $control_ops = array('id_base' => 'pyre_homepage_1col-widget');
    $this->WP_Widget('pyre_homepage_1col-widget', 'Avenue Theme: Home 1-column', $widget_ops, $control_ops);
}

function widget($args, $instance)

{
    extract($args);
    $title = $instance['title'];
    $post_type = 'all';
    $categories = $instance['categories'];
    $posts = $instance['posts'];
    $images = true;
    $rating = true;
    $show_excerpt = isset($instance['show_excerpt']) ? 'true' : 'false';

    echo $before_widget;
    ?>
    <?php
    $post_types = get_post_types();
    unset($post_types['page'], $post_types['attachment'], $post_types['revision'], $post_types['nav_menu_item']);
    if($post_type == 'all') {
        $post_type_array = $post_types;
    } else {
        $post_type_array = $post_type;
    }

    ?>
    <div class="block full">
        <h3><a href="<?php echo get_category_link($categories); ?>"><?php echo $title; ?></a> <span class="arrows">&raquo;</span></h3>
        <?php
        $recent_posts = new WP_Query(array(
            'showposts' => $posts,
            'cat' => $categories,
        ));
        ?>
        <?php
        $big_count = round($posts / 9);
        if(!$big_count) { $big_count = 1; }
        ?>

        <?php $counter = 1; while($recent_posts->have_posts()): $recent_posts->the_post(); ?>
        <?php
        if(has_post_format('video') || has_post_format('audio') || has_post_format('gallery')) {
            $icon = '<span class="' . get_post_format($post->ID) . '-icon"></span>';
        } else {
            $icon = '';
        }
        ?>

        <?php if($counter <= $big_count): ?>
        <?php if($counter == $big_count) { $last = 'block-item-big-last'; } else { $last = ''; }?>

        <div class="block-item-big <?php echo $last; ?>">
            <?php if($images && has_post_thumbnail()): ?>
            <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'widget-image'); ?>
            <div class="block-image"><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width='290' height='160' /></a><?php echo $icon; ?></div>
            <?php else: ?>
            <div class="block-image"><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php bloginfo('template_directory'); ?>/images/thumbnail.png&w=290&h=160" alt="<?php the_title(); ?>" width='290' height='160' /></a><?php echo $icon; ?></div>
            <?php endif; ?>

            <h2><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><?php the_title(); ?></a></h2><h4><?php echo ' - ' ?><?php the_time('F j, Y'); ?></h4>
            <?php if($show_excerpt == 'true'): ?><p><?php echo string_limit_words(get_the_excerpt(), 15); ?><a href='<?php the_permalink(); ?>'> [...]</a></p><?php endif; ?>
        </div>

        <?php else: ?>

        <div class="block-item-small">
            <!--<?php if($images && has_post_thumbnail()): ?>
            <?php $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'widget-image-thumb'); ?>
            <div class="block-image"><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><img src="<?php echo $image[0]; ?>" alt="<?php the_title(); ?>" width='50' height='50' /></a><?php echo $icon; ?></div>
            <?php else: ?>
            <div class="block-image"><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php bloginfo('template_directory'); ?>/images/thumbnail.png&w=50&h=50" alt="<?php the_title(); ?>"  width='50' height='50' /></a><?php echo $icon; ?></div>
            <?php endif; ?>-->
            <h4><?php echo the_time('d/n'); ?><?php echo ' - ' ?><a href='<?php the_permalink(); ?>' title='<?php the_title(); ?>'><?php the_title(); ?></a></h4>
        </div>

        <?php endif; ?>

        <?php $counter++; endwhile; ?>
    </div>

    <?php
    echo $after_widget;
}

function update($new_instance, $old_instance)
{
    $instance = $old_instance;
    $instance['title'] = $new_instance['title'];
    $instance['post_type'] = 'all';
    $instance['categories'] = $new_instance['categories'];
    $instance['posts'] = $new_instance['posts'];
    $instance['show_images'] = true;
    $instance['show_rating'] = true;
    $instance['show_excerpt'] = $new_instance['show_excerpt'];

    return $instance;
}

function form($instance)
{
    $defaults = array('title' => 'Recent Posts', 'post_type' => 'all', 'categories' => 'all', 'posts' => 4, 'show_excerpt' => null);
    $instance = wp_parse_args((array) $instance, $defaults); ?>
    <p>
        <label for="<?php echo $this->get_field_id('title'); ?>">Title:</label>
        <input class="widefat" style="width: 216px;" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $instance['title']; ?>" />
    </p>

    <p>
        <label for="<?php echo $this->get_field_id('categories'); ?>">Filter by Category:</label> 
        <select id="<?php echo $this->get_field_id('categories'); ?>" name="<?php echo $this->get_field_name('categories'); ?>" class="widefat categories" style="width:100%;">
            <option value='all' <?php if ('all' == $instance['categories']) echo 'selected="selected"'; ?>>all categories</option>
            <?php $categories = get_categories('hide_empty=0&depth=1&type=post'); ?>
            <?php foreach($categories as $category) { ?>
            <option value='<?php echo $category->term_id; ?>' <?php if ($category->term_id == $instance['categories']) echo 'selected="selected"'; ?>><?php echo $category->cat_name; ?></option>
            <?php } ?>
        </select>
    </p>
    <p>
        <label for="<?php echo $this->get_field_id('posts'); ?>">Number of posts:</label>
        <input class="widefat" style="width: 30px;" id="<?php echo $this->get_field_id('posts'); ?>" name="<?php echo $this->get_field_name('posts'); ?>" value="<?php echo $instance['posts']; ?>" />
    </p>
    <p>
        <input class="checkbox" type="checkbox" <?php checked($instance['show_excerpt'], 'on'); ?> id="<?php echo $this->get_field_id('show_excerpt'); ?>" name="<?php echo $this->get_field_name('show_excerpt'); ?>" /> 
        <label for="<?php echo $this->get_field_id('show_excerpt'); ?>">Show excerpt</label>
    </p>
<?php }}
share|improve this question

1 Answer 1

Custom post types are new post types you can create. A custom post type can be added to WordPress via the register_post_type() function. This function allows you to define a new post type by its labels, supported features, availability and other specifics.

Note that you must call register_post_type() before the admin_menu and after the after_setup_theme action hooks. A good hook to use is the init hook.

Here's a basic example of adding a custom post type:

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'acme_product',
        array(
            'labels' => array(
                'name' => __( 'Products' ),
                'singular_name' => __( 'Product' )
            ),
        'public' => true,
        'has_archive' => true,
        )
    );
}

This creates a post type named Product identified as acme_product. The register_post_type() function receives two major arguments. The first one is labels which define the name of the post type in both plural and singular forms. The second one is public which is a predefined flag to show the post type on the administration screens and to make it show up in the site content itself, if it's queried for.

There are many more arguments you can pass to the register_post_type() function, to do things like set up hierarchy (to behave like pages), show the new post type in searches, change the URLs of the new posts, and hide or show meta boxes in the post edit screen.

share|improve this answer
    
so how if the post type already registered from plugins ? for examples wiki_indo. Should i registered again in functions.php of my theme ? –  user33429 Jun 17 '13 at 19:20

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.