custom post type and meta fields

34
Custom Posts and Meta Boxes

Upload: liton-arefin

Post on 13-Jan-2015

2.444 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Custom post type and meta fields

Custom Posts and Meta Boxes

Page 2: Custom post type and meta fields

About Me

Md. Liton ArefinSenior Developer

JoomShaper

Page 3: Custom post type and meta fields

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.

Page 4: Custom post type and meta fields

Custom Post Types

• Post• Page• Attachment• Revision• Navigation

Page 5: Custom post type and meta fields
Page 6: Custom post type and meta fields

Where Post Type Locates?

• Post type stored in “wp_posts” database table

Page 7: Custom post type and meta fields

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)

Page 8: Custom post type and meta fields

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

Page 9: Custom post type and meta fields

Example

Page 10: Custom post type and meta fields

Example

Page 11: Custom post type and meta fields

What we need to create a Portfolio?

Page 12: Custom post type and meta fields

What we need to create a Portfolio?

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

Page 13: Custom post type and meta fields

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 ) ?>

Page 14: Custom post type and meta fields

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' );

);

Page 15: Custom post type and meta fields

$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 );

Page 16: Custom post type and meta fields

Output Of register_post_type()

Page 17: Custom post type and meta fields

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' );

Page 18: Custom post type and meta fields
Page 19: Custom post type and meta fields

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__) . '" />'; }

Page 20: Custom post type and meta fields

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

Page 21: Custom post type and meta fields
Page 22: Custom post type and meta fields

Manage Custom Post Columns

Page 23: Custom post type and meta fields

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');

}}

Page 24: Custom post type and meta fields

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

Page 25: Custom post type and meta fields

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

Page 26: Custom post type and meta fields

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();?>

Page 27: Custom post type and meta fields

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();?>

Page 28: Custom post type and meta fields

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();?>

Page 29: Custom post type and meta fields

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 30: Custom post type and meta fields

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’);

Page 31: Custom post type and meta fields

You should use

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

Page 32: Custom post type and meta fields

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/

Page 33: Custom post type and meta fields

Thanks

Page 34: Custom post type and meta fields

Question ???