custom post type and meta fields

Post on 13-Jan-2015

2.455 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Custom Posts and Meta Boxes

About Me

Md. Liton ArefinSenior Developer

JoomShaper

What is Post Type?

WordPress can hold and display many different types of content. A single item of such a content is generally called a post, post is also a specific post type.

Custom Post Types

• Post• Page• Attachment• Revision• Navigation

Where Post Type Locates?

• Post type stored in “wp_posts” database table

When Custom Post Type Needs?

• If you need to Develop websites like:• www.youtube.com• www.bbc.co.uk

Etc

• Most Used Custom Post Type and Meta Fields

• Geo Theme (http://www.geotheme.com)

When Custom Post Type Needs?When Websites Contains:• Homepage Slider• Callout Boxes• Portfolio• Gallery (Image, Video etc)• Team/People/Staff• Job Posting• Products• Pricing Table• etc

Example

Example

What we need to create a Portfolio?

What we need to create a Portfolio?

• Title• Custom Field (Website Address)• Content • Thumbnail Image• Taxonomy Category/Tags

Register Custom Post Type

register_post_type is called when you need to create or modify a post_type. register_post_type should only be invoked through the ‘init’ action.

Referencehttp://codex.wordpress.org/Function_Reference/register_post_type

Reserved Post Types• post• page• attactment• revision• nav_menu_item

<?php register_post_type( $post_type, $args ) ?>

Practical Examplefunction sp_portfolio() {

$labels = array( 'name' => _x( 'Portfolio', 'post type general name' ), 'singular_name' => _x( 'Portfolio', 'post type singular name' ), 'add_new' => _x( 'Add New', 'book' ), 'add_new_item' => __( 'Add New Portfolio' ), 'edit_item' => __( 'Edit Portfolio' ), 'new_item' => __( 'New Portfolio Items' ), 'all_items' => __( 'All Portfolio' ), 'view_item' => __( 'View Portfolio' ), 'search_items' => __( 'Search Portfolio' ), 'not_found' => __( 'No Portfolio Items found' ), 'not_found_in_trash' => __( 'No Portfolio Items found in the Trash' ), 'parent_item_colon' => '', 'menu_name' => 'SP Portfolio' );

);

$args = array( 'labels' => $labels, 'description' => 'Holds Portfolio specific data', 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'portfolio/%year%',

'with_front' => true), 'capability_type'=> 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 5, 'supports' => array( 'title', 'editor', 'thumbnail'), 'menu_icon' => plugins_url( 'images/icon1.png', __FILE__ ) // Icon

Path );

register_post_type( 'portfolio', $args );

Output Of register_post_type()

Register TaxonomyReference: http://codex.wordpress.org/Function_Reference/register_taxonomy

<?php register_taxonomy( $taxonomy, $object_type, $args ); ?>

// Custom Portfolio Categories$labels = array('name' => _x( 'Categories', 'taxonomy general name' ),

'singular_name' => _x( 'SP Category', 'taxonomy singular name' ), 'search_items' => __( 'Search Types' ), 'all_items' => __( 'All Categories' ), 'parent_item' => __( 'Parent Category' ), 'parent_item_colon' => __( 'Parent Category:' ), 'edit_item' => __( 'Edit Category' ), 'update_item' => __( 'Update Category' ), 'add_new_item' => __( 'Add New Category' ), 'new_item_name' => __( 'New Category Name' ),

); // Custom taxonomy for Project Tags

register_taxonomy('sptag', array('portfolio'), array(

'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' =>true, ));

}

add_action( 'init', 'sp_portfolio' );

Meta Box field for Custom Post TypeReference:http://codex.wordpress.org/Function_Reference/add_meta_box<?php add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args ); ?>

add_action('admin_init','sp_portfolio_meta'); function sp_portfolio_meta() {

// add a meta box for WordPress 'project' type add_meta_box('sp_portfolio', 'Portfolio URL', 'sp_portfolio_meta_setup', 'portfolio', 'side', 'low');

// add a callback function to save any data a user enters in add_action('save_post','sp_portfolio_meta_save');

}

function sp_portfolio_meta_setup() { global $post;

?> <div class="portfolio_meta_control"> <p><input type="text" name="_url" value="<?php echo get_post_meta($post->ID,'_url',TRUE); ?>" style="width: 100%;" /> </p> </div>

<?php // create for validation echo '<input type="hidden" name="sp_meta_nonce" value="' . wp_create_nonce(__FILE__) . '" />'; }

function sp_portfolio_meta_save($post_id) { // check nonce if (!isset($_POST['sp_meta_nonce']) || !wp_verify_nonce($_POST['sp_meta_nonce'], __FILE__)) { return $post_id; }// check capabilities if (portfolio' == $_POST[post_type']) { if (!current_user_can('edit_post', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_page', $post_id)) { return $post_id; } // exit on autosave if (defined('DOING_AUTOSAVE') == DOING_AUTOSAVE) { return $post_id; } if(isset($_POST['_url'])) { update_post_meta($post_id, '_url', $_POST['_url']); } else { delete_post_meta($post_id, '_url');

}

About Nonces:http://codex.wordpress.org/Function_Reference/wp_create_nonce

Manage Custom Post Columns

function sp_add_columns($cols) { $cols['title'] = __('Portfolio Title'); $cols['thumbnail'] = __('Thumbnail'); $cols['description'] =__('Description'); $cols['_url'] =__('Portfolio URL'); $cols['sptag'] = __('Categories'); //Unset Default Date, Author etc unset ($cols['date'],$cols['author']); return $cols;

}function sp_add_column_values($column_name, $post_id) {

$width = (int) 100; $height = (int) 100; if ( 'thumbnail' == $column_name ) { $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true ); // image from gallery $attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'portfolio',

'post_mime_type' => 'image') ); if ($thumbnail_id) $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true ); elseif

($attachments) { foreach ( $attachments as $attachment_id => $attachment ) {

$thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true ); }

} if ( isset($thumb) && $thumb ) { echo $thumb; } else { echo __('None');

}}

elseif ('description' == $column_name) { echo the_content(); } elseif ('_url' == $column_name) {

echo get_post_meta($post_id, '_url', true); } elseif ('sptag' == $column_name) {

$terms = wp_get_post_terms(get_the_ID(), 'sptag' ); $t = array(); foreach($terms as $term) $t[] = $term->slug; echo implode(', ', $t); $t = array();

} } // For Portfolio Items add_filter( 'manage_portfolio_posts_columns', 'sp_add_columns' ); add_action( 'manage_portfolio_posts_custom_column', 'sp_add_column_values', 10, 2 );

Reference:http://codex.wordpress.org/Plugin_API/Filter_Reference/manage_$post_type_posts_columnshttp://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_columnhttp://codex.wordpress.org/Plugin_API/Filter_Reference/manage_edit-post_type_columns

http://justintadlock.com/archives/2011/06/27/custom-columns-for-custom-post-types

How to show Contents?There are few options to retrieve custom postsquery_posts()WP_Query()get_posts()

Refefences:http://codex.wordpress.org/Function_Reference/query_postshttp://codex.wordpress.org/Class_Reference/WP_Queryhttp://codex.wordpress.org/Template_Tags/get_posts

Query_posts()<?php/* * Template Name: SP Portfolio*/ get_header();query_posts(array('post_type' => 'portfolio', 'posts_per_page' => -1));?><div class=“container”>

<?php if(have_posts()){ while(have_posts()){ the_post(); ?><article class=“post-<?php the_ID(); ?>" <?php post_class(); ?>>

<h2><?php the_title();?></h2><p><?php the_content();?></p><a href=“<?php echo get_post_meta($post->ID, '_url', true); ?>”></a>

</article><?php } } // Reset Querywp_reset_query();

?></div><?php get_footer();?>

WP_Query()<?php/* * Template Name: SP Portfolio*/ get_header();$args = array('post_type' => 'portfolio', 'posts_per_page' => -1);$query = new WP_Query( $args );?><div class=“container”>

<?php if($query->have_posts()){ while($query->have_posts()){$query->the_post(); ?><article class=“post-<?php the_ID(); ?>" <?php post_class(); ?>>

<h2><?php echo get_the_title();?></h2><p><?php echo get_the_content();?></p><a href=“<?php echo get_post_meta($post->ID, '_url', true); ?>”></a>

</article><?php } }

// Restore original Post Data wp_reset_postdata();?></div><?php get_footer();?>

get_posts()<?php/* * Template Name: SP Portfolio*/ get_header();$args = array( 'posts_per_page' => 5, 'offset'=> 1, 'category' => 1 );$query = get_posts( $args );foreach ( $query as $post ) { setup_postdata( $post ); ?><div class=“container”>

<article class=“post-<?php the_ID(); ?>" <?php post_class(); ?>><h2> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </h2><p><?php the_content();?></p><a href=“<?php echo get_post_meta($post->ID, '_url', true); ?>”></a>

</article><?php

} // Restore original Post Data wp_reset_postdata();?></div><?php get_footer();?>

Which one is best?

query_posts() : alter of main query. Post-related global variables and template tags will be altered.

WP_Query() : defined in wp-includes/query.php. wp-blog-header.php gives $wp_query object information. $is_* holds the informations.

get_posts() : returns array of posts. Direct access to database using WP_Query()

get_posts() is best to use.

Page Template function sp_template_redirect($template_path ) {

if ('portfolio' == $_POST['post_type']) { $template_path = plugin_dir_path( __FILE__ ) . '/theme/page-

portfolio.php'; } return $template_path;

}add_action(‘template_redirect’,’ sp_template_redirect’);

You should use

For secondary query like sidebar widget posts use WP_Query or get_posts()

References• http://generatewp.com/

• http://www.joomshaper.com/blog/wordpress/create-a-custom-post-type-in-wordpress

• http://www.joomshaper.com/blog/wordpress/add-meta-boxes-in-custom-post-type• http://wp.smashingmagazine.com/2012/11/08/complete-guide-custom-post-types/• http://wp.tutsplus.com/tutorials/plugins/a-guide-to-wordpress-custom-post-types-creation-

display-and-meta-boxes/• http://wp.tutsplus.com/tutorials/creative-coding/custom-page-template-page-based-on-url-

rewrite/• http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/• http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-post-types-taxonomies/

Thanks

Question ???

top related