WORDPRESS 
CUZTOM 
HELPER 
- A helper to make the life of Wordpress developers easier. 
_ Ante Primorac (@anteprimorac) 
_ Web Developer @ Slicejack 
_ 2nd WordPress Meetup Split
WHAT DO WE USE 
CUZTOM FOR? 
_ Post types 
_ Taxonomies 
_ Meta Boxes 
_ Post meta 
_ Term meta 
_ User meta
HOW TO USE CUZTOM? 
1 CLONE REPOSITORY TO INC/CUZTOM/ 
slicejack:inc ante$ git clone https://github.com/gizburdt/wp-cuztom.git cuztom 
2 CREATE CUZTOM.PHP AND LET THE MAGIC BEGIN 
<?php 
define( 'CUZTOM_TEXTDOMAIN', 'slicejack' ); 
define( 'CUZTOM_URL', get_template_directory_uri() . '/inc/cuztom' ); 
require( 'cuztom/cuztom.php' );
BOOKS LIBRARY 
1 CREATE CUSTOM POST TYPE - BOOK 
$books = new Cuztom_Post_Type( 'book', array( 
'has_archive' => true, 
'rewrite' => array( 
'slug' => 'books' 
), 
'supports' => array( 'title', 'editor', 'thumbnail', 'revisions' ) 
) );
BOOKS LIBRARY 
2 CREATE CUSTOM TAXONOMY - BOOK CATEGORY 
$book_category = new Cuztom_Taxonomy( 'Book Category', 'book' );
BOOKS LIBRARY 
3 CREATE METABOX - INFO 
$books->add_meta_box( 
'info', 
'Info', 
array( 
array( 
'name' => 'author', 
'label' => 'Author', 
'type' => 'text' 
), 
array( 
'name' => 'date', 
'label' => 'Date', 
'type' => 'date' 
), 
array( 
'name' => 'price', 
'label' => 'Price', 
'type' => 'text' 
), 
array( 
'name' => 'number_of_pages', 
'label' => 'Number of pages', 
'type' => 'text' 
), 
array( 
'name' => 'bind_type', 
'label' => 'Bind type', 
'type' => 'select', 
'options' => array( 
'hardcover' => 'Hardcover', 
'double-wire' => 'Double wire', 
'spiral' => 'Spiral' 
), 
'default_value' => 'hardcover' 
), 
array( 
'name' => 'size', 
'label' => 'Size', 
'type' => 'select', 
'options' => array( 
'a5' => 'A5', 
'a4' => 'A4', 
'a3' => 'A3' 
), 
'default_value' => 'a4' 
) 
) 
);
FIELD TYPES 
_ text - a simple text field 
_ textarea - a large textarea for multiple lines of text 
_ checkbox - a simple boolean entry 
_ yesno - allows choice of yes/no (pre-made extension of radio) 
_ select - combo box selection 
_ multi_select - multi select selection 
_ checkboxes - a checkbox group 
_ radios - a radio group 
_ wysiwyg - an editor with the same controls as the standard WordPress editor 
_ image - image upload box 
_ file - file upload box 
_ date - date selection 
_ datetime - date and time (hour+minutes) selection 
_ time - time (hour+minutes) selection 
_ color - color selection 
_ post_select - allows inner-post references via a combo-box 
_ post_checkboxes - allows inner-post references via a checkbox group 
_ term_select - allows category references via a combo-box 
_ term_checkboxes - allows category references via a checkbox group 
_ hidden - a hidden field (oſten used to store information not visible to the user).
BOOKS LIBRARY 
4 TEMPLATE 
<div class="entry-content"> 
<?php 
$bind_types = array( 
'hardcover' => __( 'Hardcover', 'slicejack' ), 
'double-wire' => __( 'Double wire', 'slicejack' ), 
'spiral' => __( 'Spiral', 'slicejack' ) 
); 
$sizes = array( 
'a5' => __( 'A5', 'slicejack' ), 
'a4' => __( 'A4', 'slicejack' ), 
'a3' => __( 'A3', 'slicejack' ) 
); 
?> 
<strong><?php _e( 'Author:', 'slicejack' ); ?></strong> <?php echo get_post_meta( get_the_id(), 
'_info_author', true ); ?><br /> 
<strong><?php _e( 'Date:', 'slicejack' ); ?></strong> <?php echo date( 'd.m.Y.', 
get_post_meta( get_the_id(), '_info_date', true ) ); ?><br /> 
<strong><?php _e( 'Price:', 'slicejack' ); ?></strong> $<?php echo get_post_meta( get_the_id(), 
'_info_price', true ); ?><br /> 
<strong><?php _e( 'Number of pages:', 'slicejack' ); ?></strong> <?php echo 
get_post_meta( get_the_id(), '_info_number_of_pages', true ); ?><br /> 
<strong><?php _e( 'Bind type:', 'slicejack' ); ?></strong> <?php echo 
$bind_types[ get_post_meta( get_the_id(), '_info_bind_type', true ) ]; ?><br /> 
<strong><?php _e( 'Size:', 'slicejack' ); ?></strong> <?php echo 
$sizes[ get_post_meta( get_the_id(), '_info_size', true ) ]; ?> 
</div><!-- .entry-content -->
FEATURED LIBRARY 
1 ADD METABOX TO PAGE TEMPLATE 
if ( is_admin() ) : 
$pid = 0; 
if( array_key_exists( 'post', $_GET ) ) 
$pid = $_GET['post']; 
elseif ( array_key_exists( 'post_ID', $_POST ) ) 
$pid = $_POST['post_ID']; 
$page_template = basename( get_post_meta( $pid, '_wp_page_template', true ) ); 
if ( 'featured-library.php' == $page_template ) : $cpage = new Cuztom_Post_Type( 'page' ); 
$cpage 
->remove_post_type_support( array( 'editor', 'thumbnail' ) ) 
->add_meta_box( 
'library', 
'Library', 
array( 
'bundle', 
array( 
array( 
'name' => 'book', 
'label' => 'Book', 
'type' => 'post_select', 
'args' => array( 
'post_type' => 'book', 
'show_option_none' => 'None' 
) 
)
FEATURED LIBRARY 
2 PAGE TEMPLATE 
<?php 
// Start the Loop. 
while ( have_posts() ) : the_post(); 
?> 
<?php 
the_title( '<header class="entry-header"><h1 class="entry-title">', '</h1></ 
header><!-- .entry-header -->' ); 
?> 
<?php 
$library = get_post_meta( get_the_id(), '_library', true ); 
foreach( $library as $book ) : 
$post = get_post( $book['_book'] ); 
setup_postdata( $post ); 
get_template_part( 'book' ); 
endforeach; 
wp_reset_postdata(); 
endwhile; 
?>
CUSTOM FIELD TYPE 
1 CREATE YOURFIELD.CLASS.PHP AND SAVE IT TO 
<?php 
if( ! defined( 'ABSPATH' ) ) exit; 
class Cuztom_Field_Ip extends Cuztom_Field 
{ 
var $_supports_repeatable = true; 
var $_supports_bundle = true; 
var $_supports_ajax = true; 
var $css_classes = array( 'cuztom-input', 'cuztom-ip' ); 
function _output( $value ) 
{ 
$output = ''; 
$output .= '<input type="text" ' . $this->output_name() . ' ' . $this->output_id() . ' ' . 
$this->output_css_class() . ' value="' . ( ! empty( $value ) ? $value : '0.0.0.0' ) . '" />'; 
$output .= $this->output_explanation(); 
return $output; 
} 
INC/CUZTOM/CLASSES/FIELDS
CUSTOM FIELD TYPE 
1 CREATE YOURFIELD.CLASS.PHP AND SAVE IT TO 
function save_value( $value ) { 
return filter_var( $value, FILTER_VALIDATE_IP ) ? $value : '0.0.0.0'; 
} 
} 
INC/CUZTOM/CLASSES/FIELDS
CUSTOM FIELD TYPE 
2 INCLUDE FIELD TYPE CLASS 
private function includes() 
{ 
/*...*/ 
include( CUZTOM_DIR . 'classes/fields/ip.class.php' ); 
}
CONTRIBUTE ON GITHUB 
https://github.com/gizburdt/wp-cuztom
THANK 
YOU! 
_ Ante Primorac (@anteprimorac) 
_ Web Developer @ Slicejack 
_ 2nd WordPress Meetup Split

WordPress Cuztom Helper

  • 1.
    WORDPRESS CUZTOM HELPER - A helper to make the life of Wordpress developers easier. _ Ante Primorac (@anteprimorac) _ Web Developer @ Slicejack _ 2nd WordPress Meetup Split
  • 2.
    WHAT DO WEUSE CUZTOM FOR? _ Post types _ Taxonomies _ Meta Boxes _ Post meta _ Term meta _ User meta
  • 3.
    HOW TO USECUZTOM? 1 CLONE REPOSITORY TO INC/CUZTOM/ slicejack:inc ante$ git clone https://github.com/gizburdt/wp-cuztom.git cuztom 2 CREATE CUZTOM.PHP AND LET THE MAGIC BEGIN <?php define( 'CUZTOM_TEXTDOMAIN', 'slicejack' ); define( 'CUZTOM_URL', get_template_directory_uri() . '/inc/cuztom' ); require( 'cuztom/cuztom.php' );
  • 4.
    BOOKS LIBRARY 1CREATE CUSTOM POST TYPE - BOOK $books = new Cuztom_Post_Type( 'book', array( 'has_archive' => true, 'rewrite' => array( 'slug' => 'books' ), 'supports' => array( 'title', 'editor', 'thumbnail', 'revisions' ) ) );
  • 6.
    BOOKS LIBRARY 2CREATE CUSTOM TAXONOMY - BOOK CATEGORY $book_category = new Cuztom_Taxonomy( 'Book Category', 'book' );
  • 8.
    BOOKS LIBRARY 3CREATE METABOX - INFO $books->add_meta_box( 'info', 'Info', array( array( 'name' => 'author', 'label' => 'Author', 'type' => 'text' ), array( 'name' => 'date', 'label' => 'Date', 'type' => 'date' ), array( 'name' => 'price', 'label' => 'Price', 'type' => 'text' ), array( 'name' => 'number_of_pages', 'label' => 'Number of pages', 'type' => 'text' ), array( 'name' => 'bind_type', 'label' => 'Bind type', 'type' => 'select', 'options' => array( 'hardcover' => 'Hardcover', 'double-wire' => 'Double wire', 'spiral' => 'Spiral' ), 'default_value' => 'hardcover' ), array( 'name' => 'size', 'label' => 'Size', 'type' => 'select', 'options' => array( 'a5' => 'A5', 'a4' => 'A4', 'a3' => 'A3' ), 'default_value' => 'a4' ) ) );
  • 9.
    FIELD TYPES _text - a simple text field _ textarea - a large textarea for multiple lines of text _ checkbox - a simple boolean entry _ yesno - allows choice of yes/no (pre-made extension of radio) _ select - combo box selection _ multi_select - multi select selection _ checkboxes - a checkbox group _ radios - a radio group _ wysiwyg - an editor with the same controls as the standard WordPress editor _ image - image upload box _ file - file upload box _ date - date selection _ datetime - date and time (hour+minutes) selection _ time - time (hour+minutes) selection _ color - color selection _ post_select - allows inner-post references via a combo-box _ post_checkboxes - allows inner-post references via a checkbox group _ term_select - allows category references via a combo-box _ term_checkboxes - allows category references via a checkbox group _ hidden - a hidden field (oſten used to store information not visible to the user).
  • 11.
    BOOKS LIBRARY 4TEMPLATE <div class="entry-content"> <?php $bind_types = array( 'hardcover' => __( 'Hardcover', 'slicejack' ), 'double-wire' => __( 'Double wire', 'slicejack' ), 'spiral' => __( 'Spiral', 'slicejack' ) ); $sizes = array( 'a5' => __( 'A5', 'slicejack' ), 'a4' => __( 'A4', 'slicejack' ), 'a3' => __( 'A3', 'slicejack' ) ); ?> <strong><?php _e( 'Author:', 'slicejack' ); ?></strong> <?php echo get_post_meta( get_the_id(), '_info_author', true ); ?><br /> <strong><?php _e( 'Date:', 'slicejack' ); ?></strong> <?php echo date( 'd.m.Y.', get_post_meta( get_the_id(), '_info_date', true ) ); ?><br /> <strong><?php _e( 'Price:', 'slicejack' ); ?></strong> $<?php echo get_post_meta( get_the_id(), '_info_price', true ); ?><br /> <strong><?php _e( 'Number of pages:', 'slicejack' ); ?></strong> <?php echo get_post_meta( get_the_id(), '_info_number_of_pages', true ); ?><br /> <strong><?php _e( 'Bind type:', 'slicejack' ); ?></strong> <?php echo $bind_types[ get_post_meta( get_the_id(), '_info_bind_type', true ) ]; ?><br /> <strong><?php _e( 'Size:', 'slicejack' ); ?></strong> <?php echo $sizes[ get_post_meta( get_the_id(), '_info_size', true ) ]; ?> </div><!-- .entry-content -->
  • 13.
    FEATURED LIBRARY 1ADD METABOX TO PAGE TEMPLATE if ( is_admin() ) : $pid = 0; if( array_key_exists( 'post', $_GET ) ) $pid = $_GET['post']; elseif ( array_key_exists( 'post_ID', $_POST ) ) $pid = $_POST['post_ID']; $page_template = basename( get_post_meta( $pid, '_wp_page_template', true ) ); if ( 'featured-library.php' == $page_template ) : $cpage = new Cuztom_Post_Type( 'page' ); $cpage ->remove_post_type_support( array( 'editor', 'thumbnail' ) ) ->add_meta_box( 'library', 'Library', array( 'bundle', array( array( 'name' => 'book', 'label' => 'Book', 'type' => 'post_select', 'args' => array( 'post_type' => 'book', 'show_option_none' => 'None' ) )
  • 14.
    FEATURED LIBRARY 2PAGE TEMPLATE <?php // Start the Loop. while ( have_posts() ) : the_post(); ?> <?php the_title( '<header class="entry-header"><h1 class="entry-title">', '</h1></ header><!-- .entry-header -->' ); ?> <?php $library = get_post_meta( get_the_id(), '_library', true ); foreach( $library as $book ) : $post = get_post( $book['_book'] ); setup_postdata( $post ); get_template_part( 'book' ); endforeach; wp_reset_postdata(); endwhile; ?>
  • 15.
    CUSTOM FIELD TYPE 1 CREATE YOURFIELD.CLASS.PHP AND SAVE IT TO <?php if( ! defined( 'ABSPATH' ) ) exit; class Cuztom_Field_Ip extends Cuztom_Field { var $_supports_repeatable = true; var $_supports_bundle = true; var $_supports_ajax = true; var $css_classes = array( 'cuztom-input', 'cuztom-ip' ); function _output( $value ) { $output = ''; $output .= '<input type="text" ' . $this->output_name() . ' ' . $this->output_id() . ' ' . $this->output_css_class() . ' value="' . ( ! empty( $value ) ? $value : '0.0.0.0' ) . '" />'; $output .= $this->output_explanation(); return $output; } INC/CUZTOM/CLASSES/FIELDS
  • 16.
    CUSTOM FIELD TYPE 1 CREATE YOURFIELD.CLASS.PHP AND SAVE IT TO function save_value( $value ) { return filter_var( $value, FILTER_VALIDATE_IP ) ? $value : '0.0.0.0'; } } INC/CUZTOM/CLASSES/FIELDS
  • 17.
    CUSTOM FIELD TYPE 2 INCLUDE FIELD TYPE CLASS private function includes() { /*...*/ include( CUZTOM_DIR . 'classes/fields/ip.class.php' ); }
  • 18.
    CONTRIBUTE ON GITHUB https://github.com/gizburdt/wp-cuztom
  • 19.
    THANK YOU! _Ante Primorac (@anteprimorac) _ Web Developer @ Slicejack _ 2nd WordPress Meetup Split