From: Anthony Talarico Date: Wed, 9 May 2018 20:52:11 +0000 (-0400) Subject: adding rooms custom post type X-Git-Tag: v1.0.0^2~47 X-Git-Url: http://cvs2.gaslightmedia.com/gitweb/?a=commitdiff_plain;h=5d4135df025e38993dcfd1ebabe06db8ead737ee;p=WP-Themes%2Flaurium.git adding rooms custom post type adding cpt to organize post types --- diff --git a/functions.php b/functions.php index 780e61d..8258465 100644 --- a/functions.php +++ b/functions.php @@ -201,7 +201,10 @@ function accesspress_parallax_scripts() { } } add_action( 'wp_enqueue_scripts', 'accesspress_parallax_scripts' ); - +/** + * Implement the Custom Header feature. + */ +require get_template_directory() . '/inc/rooms.php'; /** * Implement the Custom Header feature. */ diff --git a/inc/rooms.php b/inc/rooms.php new file mode 100644 index 0000000..368718d --- /dev/null +++ b/inc/rooms.php @@ -0,0 +1,738 @@ + + * Author URI: + * License: GPLv2 + **/ + +define( 'GLM_POST_TYPE', 'sitemap' ); +define( 'GLM_PRODUCT_SINGLE', 'Room' ); +define( 'GLM_PRODUCT_PLURAL', 'Rooms' ); +define( 'GLM_CATEGORY_NAME', 'rooms_category' ); +define( 'GLM_CATEGORY_SLUG', 'rooms-category' ); +define( 'GLM_CATEGORY_SINGLE', 'Site' ); +define( 'GLM_CATEGORY_PLURAL', 'Room Types' ); + +// Register Custom Post Type. +/** + * Rooms_custom_post_type + * + * Setup of the Wordpress Custom Post Type + * + * @access public + * @return void + */ +function rooms_custom_post_type() { + + $labels = array( + 'name' => _x( GLM_PRODUCT_PLURAL, 'Post Type General Name' ), + 'singular_name' => _x( GLM_PRODUCT_SINGLE, 'Post Type Singular Name' ), + 'menu_name' => __( GLM_PRODUCT_PLURAL ), + 'name_admin_bar' => __( GLM_PRODUCT_PLURAL ), + 'archives' => __( GLM_PRODUCT_SINGLE . ' Archives' ), + 'parent_item_colon' => __( 'Parent Room:' ), + 'all_items' => __( 'All Rooms' ), + 'add_new_item' => __( 'Add New Room' ), + 'add_new' => __( 'Add New Room' ), + 'new_item' => __( 'New Room' ), + 'edit_item' => __( 'Edit Room' ), + 'update_item' => __( 'Update Room' ), + 'view_item' => __( 'View Room' ), + 'search_items' => __( 'Search Room' ), + 'not_found' => __( 'Not found' ), + 'not_found_in_trash' => __( 'Not found in Trash' ), + 'featured_image' => __( 'Featured Image' ), + 'set_featured_image' => __( 'Set featured image' ), + 'remove_featured_image' => __( 'Remove featured image' ), + 'use_featured_image' => __( 'Use as featured image' ), + 'insert_into_item' => __( 'Insert into item' ), + 'uploaded_to_this_item' => __( 'Uploaded to this item' ), + 'items_list' => __( 'Rooms list' ), + 'items_list_navigation' => __( 'Rooms list navigation' ), + 'filter_items_list' => __( 'Filter items list' ), + ); + + $rewrite = array( + 'slug' => GLM_POST_TYPE, + 'with_front' => false, + 'pages' => false, + 'feeds' => false, + ); + + $args = array( + 'label' => __( GLM_PRODUCT_SINGLE ), + 'description' => __( 'Custom ' . GLM_PRODUCT_PLURAL ), + 'labels' => $labels, + 'supports' => array( 'title', 'thumbnail', 'revisions', 'editor', 'author'), + 'hierarchical' => true, + 'public' => true, + 'show_ui' => true, + 'show_in_menu' => true, + 'menu_position' => 5, + 'menu_icon' => 'dashicons-lightbulb', + 'show_in_admin_bar' => true, + 'show_in_nav_menus' => true, + 'can_export' => true, + 'has_archive' => true, + 'exclude_from_search' => false, + 'publicly_queryable' => true, + 'rewrite' => $rewrite, + 'capability_type' => 'page', + 'register_meta_box_cb' => 'rooms_add_metaboxes', + ); + + register_post_type( GLM_POST_TYPE, $args ); + register_taxonomy_for_object_type( GLM_CATEGORY_NAME, GLM_POST_TYPE ); +} + +/** + * Rooms_add_metaboxes + * + * Add the meta fields + * + * @access public + * @return void + */ +function rooms_add_metaboxes() { + add_meta_box( 'rooms_water', 'Water', 'rooms_water', GLM_POST_TYPE, 'side', 'low' ); + add_meta_box( 'rooms_sewer', 'Sewer', 'rooms_sewer', GLM_POST_TYPE, 'side', 'low' ); + add_meta_box( 'rooms_power', 'Power', 'rooms_power', GLM_POST_TYPE, 'side', 'low' ); + add_meta_box( 'rooms_loop', 'Loop', 'rooms_loop', GLM_POST_TYPE, 'side', 'low' ); +// add_meta_box( 'rooms_tents', 'Tents', 'rooms_tents', GLM_POST_TYPE, 'side', 'low' ); +} + +/** + * Rooms_water + * + * Add field for the water availability + * + * @access public + * @return void + */ +function rooms_water() { + global $post; + $checked = ''; + // Get the features for the post. + $water = get_post_meta( $post->ID, 'rooms_water', true ); + + // Output field. + if ( 'yes' === $water ) { + $checked = 'checked="checked"'; + } + ?> + /> + ID, 'rooms_tents', true ); +// +// // Output field. +// if ( 'yes' === $tents ) { +// $checked = 'checked="checked"'; +// } +// + + +// +//} +/** + * Rooms_loop + * + * Add field for the loop + * + * @access public + * @return void + */ +function rooms_loop() { + global $post; + $value = ''; + // Noncename needed to verify where the data originated. + $nonce = wp_create_nonce( 'roomsmeta-meta-noncename' ); + echo ''; + + // Get the features for the post. + $loop = get_post_meta( $post->ID, 'rooms_loop', true ); + // Output field. + if ( !empty( $loop ) ) { + $value = "value=".'"'.$loop .'"'; + } + + ?> + /> + '; + // Get the features for the post. + $sewer = get_post_meta( $post->ID, 'rooms_sewer', true ); + + // Output field. + if ( "yes" === $sewer ) { + $checked = 'checked="checked"'; + } + + ?> + /> + ID, 'rooms_campers', true ); + + // Output field. + if ( !empty( $campers ) ) { + $value = "value=".'"'.$campers .'"'; + } + ?> + /> + '; + + // Get the features for the post. + $power = get_post_meta( $post->ID, 'rooms_power', true ); + // Output field. + if ( !empty( $power ) ) { + $value = "value=".'"'.$power .'"'; + } + + ?> + /> + ID; + } + if ( ! current_user_can( 'edit_post', $post->ID ) ) { + return $post->ID; + } + $water = (isset($_POST['rooms_water']) ? filter_var( $_POST['rooms_water'] ) : '' ); + $sewer = (isset($_POST['rooms_sewer']) ? filter_var( $_POST['rooms_sewer'] ) : '' ); + $power = (isset($_POST['rooms_power']) ? filter_var( $_POST['rooms_power'] ) : '' ); + $loop = (isset($_POST['rooms_loop']) ? filter_var( $_POST['rooms_loop'] ) : '' ); +// $tents = filter_var( $_POST['rooms_tents'] ); + update_post_meta( $post->ID, 'rooms_water', $water ); + update_post_meta( $post->ID, 'rooms_sewer', $sewer ); + update_post_meta( $post->ID, 'rooms_power', $power ); + update_post_meta( $post->ID, 'rooms_loop', $loop ); +// update_post_meta( $post->ID, 'rooms_tents', $tents ); +} +/** + * rooms_taxonomies + * + * Setup of the Taxonomies for the post type + * + * @access public + * @return void + */ +function rooms_taxonomies() { + + // Experiences + $labels = array( + 'name' => _x( GLM_CATEGORY_NAME, 'taxonomy general name' ), + 'singular_name' => _x( GLM_CATEGORY_NAME, 'taxonomy singular name' ), + 'search_items' => __( 'Search ' . GLM_CATEGORY_PLURAL ), + 'all_items' => __( 'All ' . GLM_CATEGORY_PLURAL ), + 'parent_item' => __( 'Parent ' . GLM_CATEGORY_SINGLE ), + 'parent_item_colon' => __( 'Parent ' . GLM_CATEGORY_SINGLE ), + 'edit_item' => __( 'Edit ' . GLM_CATEGORY_SINGLE ), + 'update_item' => __( 'Update ' . GLM_CATEGORY_SINGLE ), + 'add_new_item' => __( 'Add New ' . GLM_CATEGORY_SINGLE ), + 'new_item_name' => __( 'New ' . GLM_CATEGORY_SINGLE . ' Name' ), + 'menu_name' => __( 'Site ' . GLM_CATEGORY_SINGLE ), + ); + + $capabilities = array( + 'manage_terms' => 'manage_categories', + 'edit_terms' => 'manage_categories', + 'delete_terms' => 'manage_categories', + 'assign_terms' => 'edit_posts', + ); + + $args = array( + 'label' => __( GLM_CATEGORY_PLURAL ), + 'rewrite' => array( 'slug' => GLM_CATEGORY_SLUG ), + 'capabilities' => $capabilities, + 'public ' => true, + 'show_in_quick_edit' => true, + 'show_in_admin_column' => true, + 'hierarchical' => true + ); + + register_taxonomy( + GLM_CATEGORY_NAME, + GLM_POST_TYPE, + $args + ); +} + +/** + * rooms_taxonomy_filter_restrict_manage_posts + * + * This will setup the Filter for the Custom taxonomies. + * + * @access public + * @return void + */ +function rooms_taxonomy_filter_restrict_manage_posts() { + global $typenow; + + $post_types = get_post_types( array( '_builtin' => false ) ); + + if ( in_array( $typenow, $post_types ) ) { + $filters = get_object_taxonomies( $typenow ); + + foreach ( $filters as $tax_slug ) { + $tax_obj = get_taxonomy( $tax_slug ); + wp_dropdown_categories( array( + 'show_option_all' => __( 'Show All ' . $tax_obj->label ), + 'taxonomy' => $tax_slug, + 'name' => $tax_obj->name, + 'orderby' => 'name', + 'selected' => ( isset( $_GET[$tax_slug] ) ), + 'hierarchical' => $tax_obj->hierarchical, + 'show_count' => false, + 'hide_empty' => true, + ) ); + } + } +} + +add_action( 'restrict_manage_posts', 'rooms_taxonomy_filter_restrict_manage_posts' ); + +/** + * Rooms_taxonomy_filter_post_type_request + * + * Filter the post request for the Taxonomy Filter + * + * @param mixed $query + * @access public + * @return void + */ +function rooms_taxonomy_filter_post_type_request( $query ) { + global $pagenow, $typenow; + + if ( 'edit.php' === $pagenow ) { + $filters = get_object_taxonomies( $typenow ); + foreach ( $filters as $tax_slug ) { + $var = &$query->query_vars[ $tax_slug ]; + + if ( isset( $var ) ) { + $term = get_term_by( 'id', $var, $tax_slug ); + + $var = $term->slug; + } + } + } +} +add_filter( 'parse_query', 'rooms_taxonomy_filter_post_type_request' ); +add_action( 'init', 'rooms_custom_post_type' ); +add_action( 'init', 'rooms_taxonomies' ); +add_action( 'save_post', 'rooms_save_meta' ); + +/** + * Rooms_set_admin_columns + * + * Setup of the list columns + * + * @access public + * @return void + */ +function rooms_set_admin_columns() { + add_filter( 'manage_edit-rooms_columns', 'rooms_admin_edit_columns' ); + add_action( 'manage_rooms_posts_custom_column', 'rooms_admin_custom_columns' ); +} + +add_action( 'admin_init', 'rooms_set_admin_columns' ); + +/** + * Rooms_admin_edit_columns + * + * Setup of the edit columns. This will create the headers for each column. + * + * @param mixed $columns + * @access public + * @return void + */ +function rooms_admin_edit_columns( $columns ) { + $columns = array( + 'cb' => '', + 'title' => GLM_PRODUCT_SINGLE . ' Title', + 'rooms_col_cat' => GLM_CATEGORY_SINGLE, + ); + return $columns; +} + +/** + * Rooms_admin_custom_columns + * + * This will generate the column data for eaoch record. + * + * @param mixed $column + * @access public + * @return void + */ +function rooms_admin_custom_columns( $column ) { + global $post; + + switch ( $column ) { + case 'rooms_col_cat': + $product_cats = get_the_terms( $post->ID, 'rooms_category' ); + $product_cats_html = array(); + if ( $product_cats ) { + foreach ( $product_cats as $product_cat ) { + array_push( $product_cats_html, $product_cat->name ); + } + echo implode( $product_cats_html, ', ' ); + } else { + _e( 'None', 'themeforce' ); + } + break; + case 'rooms_col_tag': + $product_tags = get_the_terms( $post->ID, 'rooms_tag' ); + $product_tags_html = array(); + if ( $product_tags ) { + foreach ( $product_tags as $product_tag ) { + array_push( $product_tags_html, $product_tag->name ); + } + echo implode( $product_tags_html, ', ' ); + } else { + _e( 'None', 'themeforce' ); + } + break; + } +} + +/** + * Rooms_shortcode + * + * Add shortcode function. This will call the correct function based on the + * front end search. + * + * @param mixed $atts + * @access public + * @return void + */ +function rooms_shortcode( $atts ) { + extract( shortcode_atts( array( 'limit' => '10' ), $atts ) ); + ob_start(); + + if ( isset( $atts['cat']) ) { + if ( $prod_experience = get_term_by( 'slug', $atts['cat'], GLM_CATEGORY_NAME ) ) { + if ( !isset($_REQUEST[ GLM_CATEGORY_NAME ] )) { + $_REQUEST[ GLM_CATEGORY_NAME ] = $prod_experience->term_id; + } + $cat_id = $prod_experience->term_id; + } + } + $term = get_term_by( "id", $_REQUEST[ GLM_CATEGORY_NAME ],"rooms_category" ); + $name = $term->name; + if ( !$name ) { + $name = "ALL PRODUCTS"; + } + global $wp; + echo '
+ Search Products
'; + echo rooms_get_terms_dropdown( $cat_id ); + echo '
'; + + if ( $product_id = filter_var( $_REQUEST['product'], FILTER_VALIDATE_INT ) ) { + rooms_show_product( $product_id ); + } else if ( $cat_id = filter_var( $_REQUEST['category'], FILTER_VALIDATE_INT ) ) { + rooms_list_categories( $cat_id ); + } else if ( !$catid_id && !$product_id ) { + + $text_query = filter_var( $_REQUEST['tsearch'], FILTER_SANITIZE_STRING ); + + if (isset( $_REQUEST[ 'tsearch' ] ) ) { + setcookie("search", "true",time()+2, "/" ); + } else { + setcookie("search", "null",time()+2, "/" ); + } + rooms_list_products( $text_query ); + rooms_list_categories(); + } + + $output = ob_get_contents(); + ob_end_clean(); + return $output; +} + +/** + * Rooms_get_terms_dropdown + * + * Generate the taxonomy drop down select + * + * @access public + * @return void + */ +function rooms_get_terms_dropdown( $cat_id ) { + + $taxonomy_name = GLM_CATEGORY_NAME; + if ( $cat_id ) { + $main = get_term( $cat_id, GLM_CATEGORY_NAME ); + $cats_child = get_term_children( $cat_id, $taxonomy_name ); + $output =""; + } else { + + $parent_terms = get_terms( $taxonomy_name, array('parent' => 0, 'orderby' => 'name', 'hide_empty' => false )); + $terms = get_terms( $taxonomy_name, array('orderby' => 'name', 'hide_empty' => false )); + + $output ="'; } + return $output; +} + + +/** + * Rooms_list_products + * + * Create a list of products. + * + * @access public + * @return void + */ +function rooms_list_products( $text_query ) { + global $wpdb, $wp; + $cat = get_term( $cat_id, GLM_CATEGORY_NAME ); + $args = array( + 'posts_per_page' => -1, + 'post_type' => GLM_POST_TYPE, + 's' => $text_query, + ); + $rooms_category = ( isset( $_REQUEST[ GLM_CATEGORY_NAME ] ) ) + ? filter_var( $_REQUEST[ GLM_CATEGORY_NAME ] ) + : false; + + if ( $rooms_category ) { + $args['tax_query'] = array( + 'relation' => 'AND', + ); + $args['tax_query'][] = array( + 'taxonomy' => GLM_CATEGORY_NAME, + 'field' => 'id', + 'terms' => $rooms_category, + ); + } + + $products = get_posts( $args ); + $total_products = count( $products ); + $current_url = esc_url( add_query_arg( $wp->query_string, '', home_url( $wp->request ) ) ); + $iterator = 1; + + foreach ( $products as $product ) { + $product_terms = wp_get_post_terms( $product->ID, GLM_CATEGORY_NAME, 'name' ); + $p_term = $product_terms[0]; + $product->term = $p_term->name; + $product->end = false; + if ( $iterator == $total_products ) { + $product->end = true; + } + $cat->href = "?rooms_category="; + $product->href = $current_url + . ( ( strpos( $current_url, '?' ) ) ? '&' : '?' ) + . "product=" . $product->ID; + ++$iterator; + } + + include 'views/list_products.php'; + return; +} +/** + * rooms_list_categories + * + * Create a list of categories. + * + * @param bool $cat_id + * @access public + * @return void + */ +function rooms_list_categories( $cat_id = null ) { + global $wpdb, $wp; + + $taxonomy = GLM_CATEGORY_NAME; + $args = array( + 'hide_empty' => false, + 'pad_counts' => true + ); + if ( $cat_id ) { + $args['child_of'] = $cat_id; + } else { + $args['parent'] = 0; + } + $taxonomy_terms = get_terms( $taxonomy, $args ); + + + $total_terms = count( $taxonomy_terms ); + $current_url = esc_url( add_query_arg( $wp->query_string, '', home_url( $wp->request ) ) ); + $iterator = 1; + + foreach ( $taxonomy_terms as $term ) { + $term->end = false; + if ( $iterator === $total_terms) { + $term->end = true; + } + $term->href .= //$current_url +// ( ( strpos( $current_url, '?' ) ) ? '&' : '?' ). + "?rooms_category=" . $term->term_id; + ++$iterator; + } + + include 'views/list_categories.php'; + return; +} + +/** + * Rooms_show_product + * + * Create a product detail page. + * + * @param mixed $prod_id + * @access public + * @return void + */ +function rooms_show_product( $prod_id ) { + global $wpdb, $wp; + $product = get_post( $prod_id ); + include 'views/product_detail.php'; + return; +} +/** + * Rooms_show_category + * + * Create a product detail page. + * + * @param mixed $cat_id + * @access public + * @return void + */ +function rooms_show_category( $cat_id ) { + global $wpdb, $wp; + $term = get_terms( + GLM_CATEGORY_NAME, + array( + 'child_of' => $cat_id, + 'hide_empty' => true, + //'parent' => $catid_id, + //'hierarchical' => false + ) + ); + + include 'views/category_detail.php'; + return; +} +add_shortcode( 'rooms', 'rooms_shortcode' ); + +