SlideShare a Scribd company logo
1 of 16
Download to read offline
Web Designers Meetup Cairo - 17th November 2012




               Dig Deeper into
               WordPress
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Why?
Have you ever thought



                      over 70-million websites out
                        there are using WordPress




(C) 2012 Mohamed Mosaad. All Copyrights Reserved
flexi
                             WordPress main feature is




bility
(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Custom Post Types
Custom Meta Boxes
Custom Taxonomies
Advanced Queries
Custom Admin Panels/Options
Plugin API
Hooks, Actions and Filters
Customizable Advanced User Capabilities
+ many more....


(C) 2012 Mohamed Mosaad. All Copyrights Reserved
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);

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

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
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"	
  />';
}
..........

http://codex.wordpress.org/Function_Reference/add_meta_box

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
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'	
  ),
	
  	
  ));




http://codex.wordpress.org/Taxonomies

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
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'	
  ),
	
  	
  ));




http://codex.wordpress.org/Taxonomies

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Advanced Queries
<?php $the_query = new WP_Query( $args ); ?>
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.



<?php
$args=	
  array(
	
  	
  	
  	
  	
  .
	
  	
  	
  	
  	
  .
);
$query=	
  new	
  WP_Query($args);

//	
  Loop
while($query-­‐>have_posts()):
	
  	
  	
  	
  	
  $query-­‐>next_post();
	
  	
  	
  	
  	
  $id	
  =	
  $query-­‐>post-­‐>ID;
	
  	
  	
  	
  	
  echo	
  '<li>';
	
  	
  	
  	
  	
  echo	
  get_the_title($id);
	
  	
  	
  	
  	
  echo	
  '</li>';
endwhile;
?>




http://codex.wordpress.org/Class_Reference/WP_Query

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Advanced Queries (cont.)
<?php $the_query = new WP_Query( $args ); ?>


Class Methods                                         Parameters
- 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)




http://codex.wordpress.org/Class_Reference/WP_Query

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Advanced Queries (cont.)
   <?php $wpdb->get_results( MYSQLQuery ); ?>

The $wpdb object can be used to read data from any table in the WordPress database, not just the standard
tables that WordPress creates.

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




http://codex.wordpress.org/Class_Reference/wpdb

(C) 2012 Mohamed Mosaad. All Copyrights Reserved
Scan My vCard

   wpmonkeys.com

   fb.com/banhawi

   be.net/banhawi

   eg.linkedin.com/in/banhawi

   twitter.com/banhawi

   www.                  .com




▼
▼ http://bit.ly/Xh5EiB
Thank You
§   Mohamed Mosaad
    UX Evangelist & WordPress Expert
    wpmonkeys.com

More Related Content

What's hot

Your code sucks, let's fix it (CakeFest2012)
Your code sucks, let's fix it (CakeFest2012)Your code sucks, let's fix it (CakeFest2012)
Your code sucks, let's fix it (CakeFest2012)Rafael Dohms
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascriptAlmog Baku
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Colin O'Dell
 
Apache Solr Search Mastery
Apache Solr Search MasteryApache Solr Search Mastery
Apache Solr Search MasteryAcquia
 
WooCommerce CRUD and Data Store by Akeda Bagus
WooCommerce CRUD and Data Store by Akeda BagusWooCommerce CRUD and Data Store by Akeda Bagus
WooCommerce CRUD and Data Store by Akeda BagusWordCamp Indonesia
 
Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片cfc
 
WordPress as an application framework
WordPress as an application frameworkWordPress as an application framework
WordPress as an application frameworkDustin Filippini
 
Form demoinplaywithmysql
Form demoinplaywithmysqlForm demoinplaywithmysql
Form demoinplaywithmysqlKnoldus Inc.
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginningAnis Ahmad
 
HirshHorn theme: how I created it
HirshHorn theme: how I created itHirshHorn theme: how I created it
HirshHorn theme: how I created itPaul Bearne
 
WordPress Capabilities Magic
WordPress Capabilities MagicWordPress Capabilities Magic
WordPress Capabilities Magicmannieschumpert
 
Custom Post Types and Meta Fields
Custom Post Types and Meta FieldsCustom Post Types and Meta Fields
Custom Post Types and Meta FieldsLiton Arefin
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Karsten Dambekalns
 
Coding for Scale and Sanity
Coding for Scale and SanityCoding for Scale and Sanity
Coding for Scale and SanityJimKellerES
 
Disregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDisregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDaniel Cousineau
 
Entities in drupal 7
Entities in drupal 7Entities in drupal 7
Entities in drupal 7Zsolt Tasnadi
 

What's hot (19)

Your code sucks, let's fix it (CakeFest2012)
Your code sucks, let's fix it (CakeFest2012)Your code sucks, let's fix it (CakeFest2012)
Your code sucks, let's fix it (CakeFest2012)
 
Drupal & javascript
Drupal & javascriptDrupal & javascript
Drupal & javascript
 
Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016Hacking Your Way To Better Security - Dutch PHP Conference 2016
Hacking Your Way To Better Security - Dutch PHP Conference 2016
 
Apache Solr Search Mastery
Apache Solr Search MasteryApache Solr Search Mastery
Apache Solr Search Mastery
 
Jquery introduction
Jquery introductionJquery introduction
Jquery introduction
 
WooCommerce CRUD and Data Store by Akeda Bagus
WooCommerce CRUD and Data Store by Akeda BagusWooCommerce CRUD and Data Store by Akeda Bagus
WooCommerce CRUD and Data Store by Akeda Bagus
 
Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片Contagion的Ruby/Rails投影片
Contagion的Ruby/Rails投影片
 
WordPress as an application framework
WordPress as an application frameworkWordPress as an application framework
WordPress as an application framework
 
Form demoinplaywithmysql
Form demoinplaywithmysqlForm demoinplaywithmysql
Form demoinplaywithmysql
 
jQuery from the very beginning
jQuery from the very beginningjQuery from the very beginning
jQuery from the very beginning
 
HirshHorn theme: how I created it
HirshHorn theme: how I created itHirshHorn theme: how I created it
HirshHorn theme: how I created it
 
WordPress Capabilities Magic
WordPress Capabilities MagicWordPress Capabilities Magic
WordPress Capabilities Magic
 
Custom Post Types and Meta Fields
Custom Post Types and Meta FieldsCustom Post Types and Meta Fields
Custom Post Types and Meta Fields
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
 
Coding for Scale and Sanity
Coding for Scale and SanityCoding for Scale and Sanity
Coding for Scale and Sanity
 
Disregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_FormDisregard Inputs, Acquire Zend_Form
Disregard Inputs, Acquire Zend_Form
 
jQuery
jQueryjQuery
jQuery
 
Entities in drupal 7
Entities in drupal 7Entities in drupal 7
Entities in drupal 7
 

Similar to Dig Deeper into WordPress - WD Meetup Cairo

[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018Adam Tomat
 
Building a Portfolio With Custom Post Types
Building a Portfolio With Custom Post TypesBuilding a Portfolio With Custom Post Types
Building a Portfolio With Custom Post TypesAlex Blackie
 
Working with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsWorking with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsAnthony Hortin
 
WordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta BoxesWordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta BoxesJeremy Green
 
laravel tricks in 50minutes
laravel tricks in 50minuteslaravel tricks in 50minutes
laravel tricks in 50minutesBarang CK
 
WordPress for developers - phpday 2011
WordPress for developers -  phpday 2011WordPress for developers -  phpday 2011
WordPress for developers - phpday 2011Maurizio Pelizzone
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Leonardo Proietti
 
WordPress Cuztom Helper
WordPress Cuztom HelperWordPress Cuztom Helper
WordPress Cuztom Helperslicejack
 
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...allilevine
 
MTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APIMTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APISix Apart KK
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologyDaniel Knell
 
WordPress plugin #3
WordPress plugin #3WordPress plugin #3
WordPress plugin #3giwoolee
 
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Balázs Tatár
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your CodeDrupalDay
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxMichelangelo van Dam
 
Mastering Custom Post Types - WordCamp Atlanta 2012
Mastering Custom Post Types - WordCamp Atlanta 2012Mastering Custom Post Types - WordCamp Atlanta 2012
Mastering Custom Post Types - WordCamp Atlanta 2012Mike Schinkel
 
Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Fabien Potencier
 

Similar to Dig Deeper into WordPress - WD Meetup Cairo (20)

[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018
 
Building a Portfolio With Custom Post Types
Building a Portfolio With Custom Post TypesBuilding a Portfolio With Custom Post Types
Building a Portfolio With Custom Post Types
 
Working with WooCommerce Custom Fields
Working with WooCommerce Custom FieldsWorking with WooCommerce Custom Fields
Working with WooCommerce Custom Fields
 
WordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta BoxesWordCamp Denver 2012 - Custom Meta Boxes
WordCamp Denver 2012 - Custom Meta Boxes
 
laravel tricks in 50minutes
laravel tricks in 50minuteslaravel tricks in 50minutes
laravel tricks in 50minutes
 
WordPress for developers - phpday 2011
WordPress for developers -  phpday 2011WordPress for developers -  phpday 2011
WordPress for developers - phpday 2011
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5
 
WordPress Cuztom Helper
WordPress Cuztom HelperWordPress Cuztom Helper
WordPress Cuztom Helper
 
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...
WordCamp Montreal 2015: Combining Custom Post Types, Fields, and Meta Boxes t...
 
Migrare da symfony 1 a Symfony2
 Migrare da symfony 1 a Symfony2  Migrare da symfony 1 a Symfony2
Migrare da symfony 1 a Symfony2
 
MTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new APIMTDDC 2010.2.5 Tokyo - Brand new API
MTDDC 2010.2.5 Tokyo - Brand new API
 
Symfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technologySymfony2 Building on Alpha / Beta technology
Symfony2 Building on Alpha / Beta technology
 
Separation of concerns - DPC12
Separation of concerns - DPC12Separation of concerns - DPC12
Separation of concerns - DPC12
 
WordPress plugin #3
WordPress plugin #3WordPress plugin #3
WordPress plugin #3
 
Unit testing zend framework apps
Unit testing zend framework appsUnit testing zend framework apps
Unit testing zend framework apps
 
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
 
Your Entity, Your Code
Your Entity, Your CodeYour Entity, Your Code
Your Entity, Your Code
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Mastering Custom Post Types - WordCamp Atlanta 2012
Mastering Custom Post Types - WordCamp Atlanta 2012Mastering Custom Post Types - WordCamp Atlanta 2012
Mastering Custom Post Types - WordCamp Atlanta 2012
 
Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)Be RESTful (Symfony Camp 2008)
Be RESTful (Symfony Camp 2008)
 

Recently uploaded

Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 

Recently uploaded (20)

Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 

Dig Deeper into WordPress - WD Meetup Cairo

  • 1. Web Designers Meetup Cairo - 17th November 2012 Dig Deeper into WordPress (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 2. Why? Have you ever thought over 70-million websites out there are using WordPress (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 3.
  • 4. flexi WordPress main feature is bility (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 5.
  • 6. Custom Post Types Custom Meta Boxes Custom Taxonomies Advanced Queries Custom Admin Panels/Options Plugin API Hooks, Actions and Filters Customizable Advanced User Capabilities + many more.... (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 7. 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); http://codex.wordpress.org/Function_Reference/register_post_type (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 8. 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"  />'; } .......... http://codex.wordpress.org/Function_Reference/add_meta_box (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 9. 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
  • 10. 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'  ),    )); http://codex.wordpress.org/Taxonomies (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 11. 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'  ),    )); http://codex.wordpress.org/Taxonomies (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 12. Advanced Queries <?php $the_query = new WP_Query( $args ); ?> 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. <?php $args=  array(          .          . ); $query=  new  WP_Query($args); //  Loop while($query-­‐>have_posts()):          $query-­‐>next_post();          $id  =  $query-­‐>post-­‐>ID;          echo  '<li>';          echo  get_the_title($id);          echo  '</li>'; endwhile; ?> http://codex.wordpress.org/Class_Reference/WP_Query (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 13. Advanced Queries (cont.) <?php $the_query = new WP_Query( $args ); ?> Class Methods Parameters - 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) http://codex.wordpress.org/Class_Reference/WP_Query (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 14. Advanced Queries (cont.) <?php $wpdb->get_results( MYSQLQuery ); ?> The $wpdb object can be used to read data from any table in the WordPress database, not just the standard tables that WordPress creates. $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'   " ); http://codex.wordpress.org/Class_Reference/wpdb (C) 2012 Mohamed Mosaad. All Copyrights Reserved
  • 15. Scan My vCard wpmonkeys.com fb.com/banhawi be.net/banhawi eg.linkedin.com/in/banhawi twitter.com/banhawi www. .com ▼ ▼ http://bit.ly/Xh5EiB
  • 16. Thank You § Mohamed Mosaad UX Evangelist & WordPress Expert wpmonkeys.com