Upload
mohamed-mosaad
View
1.095
Download
2
Embed Size (px)
DESCRIPTION
Dig deeper into WordPress is a presentation made for Web Designers Meetup in Cairo taken place on 17th Dec 2012. Signup at wpmonkeys.com to get notified when awesome new WordPress related content is published. Thanks to NileCode.
Dig Deeper into WordPress
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Web Designers Meetup Cairo - 17th November 2012
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
WhyHave you ever thought ?over 70-million websites out
there are using WordPress
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
flexibility
WordPress main feature is
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Custom Post TypesCustom Meta BoxesCustom TaxonomiesAdvanced QueriesCustom Admin Panels/Options Plugin APIHooks, Actions and FiltersCustomizable Advanced User Capabilities+ many more....
Custom Post Types<?php register_post_type( $post_type,
$args ); ?>
$labels = array( 'name' => _x('Books', 'post type general name', 'your_text_domain'), 'singular_name' => _x('Book', 'post type singular name', 'your_text_domain'), 'add_new' => _x('Add New', 'book', 'your_text_domain'), 'add_new_item' => __('Add New Book', 'your_text_domain'), 'edit_item' => __('Edit Book', 'your_text_domain'), 'new_item' => __('New Book', 'your_text_domain'), 'all_items' => __('All Books', 'your_text_domain'), 'view_item' => __('View Book', 'your_text_domain'), 'search_items' => __('Search Books', 'your_text_domain'), 'not_found' => __('No books found', 'your_text_domain'), 'not_found_in_trash' => __('No books found in Trash', 'your_text_domain'), 'parent_item_colon' => '', 'menu_name' => __('Books', 'your_text_domain')
); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => _x( 'book', 'URL slug', 'your_text_domain' ) ), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ) ); register_post_type('book', $args);
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
http://codex.wordpress.org/Function_Reference/register_post_type
Custom Meta Boxes<?php add_meta_box( $id, $title, $callback,
$post_type, $context, $priority, $callback_args ); ?>
<?php/* Define the custom box */add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );
/* Do something with the data entered */add_action( 'save_post', 'myplugin_save_postdata' );
/* Adds a box to the main column on the Post and Page edit screens */function myplugin_add_custom_box() { add_meta_box( 'myplugin_sectionid', __( 'My Post Section Title', 'myplugin_textdomain' ), 'myplugin_inner_custom_box', 'post' );}
/* Prints the box content */function myplugin_inner_custom_box( $post ) {
// Use nonce for verification wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );
// The actual fields for data entry echo '<label for="myplugin_new_field">'; _e("Description for this field", 'myplugin_textdomain' ); echo '</label> '; echo '<input type="text" id="myplugin_new_field" name="myplugin_new_field" value="whatever" size="25" />';}..........
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
http://codex.wordpress.org/Function_Reference/add_meta_box
Custom Meta Boxes (cont.)
/* When the post is saved, saves our custom data */function myplugin_save_postdata( $post_id ) { // verify if this is an auto save routine. // If it is our form has not been submitted, so we dont want to do anything if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( !wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) return; //if saving in a custom table, get post_ID $post_ID = $_POST['post_ID']; $mydata = $_POST['myplugin_new_field'];
// Do something with $mydata // probably using add_post_meta(), update_post_meta(), or // a custom table (see Further Reading section below)}?>
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Custom Taxonomies<?php register_taxonomy($taxonomy,
$object_type, $args); ?>
// Add new taxonomy, make it hierarchical (like categories) $labels = array( 'name' => _x( 'Genres', 'taxonomy general name' ), 'singular_name' => _x( 'Genre', 'taxonomy singular name' ), 'search_items' => __( 'Search Genres' ), 'all_items' => __( 'All Genres' ), 'parent_item' => __( 'Parent Genre' ), 'parent_item_colon' => __( 'Parent Genre:' ), 'edit_item' => __( 'Edit Genre' ), 'update_item' => __( 'Update Genre' ), 'add_new_item' => __( 'Add New Genre' ), 'new_item_name' => __( 'New Genre Name' ), 'menu_name' => __( 'Genre' ), );
register_taxonomy('genre',array('book'), array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'genre' ), ));
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
http://codex.wordpress.org/Taxonomies
Custom Taxonomies<?php register_taxonomy($taxonomy,
$object_type, $args); ?>
// Add new taxonomy, NOT hierarchical (like tags) $labels = array( 'name' => _x( 'Writers', 'taxonomy general name' ), 'singular_name' => _x( 'Writer', 'taxonomy singular name' ), 'search_items' => __( 'Search Writers' ), 'popular_items' => __( 'Popular Writers' ), 'all_items' => __( 'All Writers' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Edit Writer' ), 'update_item' => __( 'Update Writer' ), 'add_new_item' => __( 'Add New Writer' ), 'new_item_name' => __( 'New Writer Name' ), 'separate_items_with_commas' => __( 'Separate writers with commas' ), 'add_or_remove_items' => __( 'Add or remove writers' ), 'choose_from_most_used' => __( 'Choose from the most used writers' ), 'menu_name' => __( 'Writers' ), );
register_taxonomy('writer','book',array( 'hierarchical' => false, 'labels' => $labels, 'show_ui' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'writer' ), ));
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
http://codex.wordpress.org/Taxonomies
Advanced Queries <?php $the_query = new WP_Query( $args ); ?>
<?php$args= array( . .);$query= new WP_Query($args);
// Loopwhile($query-‐>have_posts()): $query-‐>next_post(); $id = $query-‐>post-‐>ID; echo '<li>'; echo get_the_title($id); echo '</li>';endwhile;?>
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
WP_Query is a class defined in wp-includes/query.php that deals with the intricacies of a posts (or pages) request to a WordPress blog. The wp-blog-header.php (or the WP class in Version 2.0) gives the $wp_query object information defining the current request, and then $wp_query determines what type of query it's dealing with (possibly a category archive, dated archive, feed, or search), and fetches the requested posts. It retains a lot of information on the request, which can be pulled at a later date.
http://codex.wordpress.org/Class_Reference/WP_Query
Advanced Queries (cont.)<?php $the_query = new WP_Query( $args ); ?>
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Class Methods- init()- parse_query( $query )- parse_query_vars()- get( $query_var )- set( $query_var, $value ) - &get_posts() - next_post() - the_post() - rewind_posts() - &query( $query ) - get_queried_object() - get_queried_object_id() - WP_Query( $query = '' ) (constructor)
Parameters
http://codex.wordpress.org/Class_Reference/WP_Query
Advanced Queries (cont.)<?php $wpdb->get_results( MYSQLQuery ); ?>
$wpdb-‐>query( $wpdb-‐>prepare( " DELETE FROM $wpdb-‐>postmeta WHERE post_id = %d AND meta_key = %s ", 13, 'gargle' ));
or
$wpdb-‐>query( " UPDATE $wpdb-‐>posts SET post_parent = 7 WHERE ID = 15 AND post_status = 'static' ");
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
The $wpdb object can be used to read data from any table in the WordPress database, not just the standard tables that WordPress creates.
http://codex.wordpress.org/Class_Reference/wpdb
wpmonkeys.com
fb.com/banhawi
be.net/banhawi
eg.linkedin.com/in/banhawi
twitter.com/banhawi
www. .com
Scan My vCard
▼▼ http://bit.ly/Xh5EiB
Thank YouMohamed MosaadUX Evangelist & WordPress Expertwpmonkeys.com§