16
Dig Deeper into WordPress (C) 2012 Mohamed Mosaad. All Copyrights Reserved Web Designers Meetup Cairo - 17th November 2012

Dig Deeper into WordPress - WD Meetup Cairo

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.

Citation preview

Page 3: Dig Deeper into WordPress - WD Meetup Cairo
Page 5: Dig Deeper into WordPress - WD Meetup Cairo
Page 6: Dig Deeper into WordPress - WD Meetup Cairo

(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....

Page 7: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 8: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 9: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 10: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 11: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 12: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 13: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 14: Dig Deeper into WordPress - WD Meetup Cairo

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

Page 16: Dig Deeper into WordPress - WD Meetup Cairo

Thank YouMohamed MosaadUX Evangelist & WordPress Expertwpmonkeys.com§