adding rooms custom post type
authorAnthony Talarico <talarico@gaslightmedia.com>
Wed, 9 May 2018 20:52:11 +0000 (16:52 -0400)
committerAnthony Talarico <talarico@gaslightmedia.com>
Wed, 9 May 2018 20:52:11 +0000 (16:52 -0400)
adding cpt to organize post types

functions.php
inc/rooms.php [new file with mode: 0644]

index 780e61d..8258465 100644 (file)
@@ -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 (file)
index 0000000..368718d
--- /dev/null
@@ -0,0 +1,738 @@
+<?php
+/**
+ * Plugin Name: Rooms Rooms
+ * Plugin URI:
+ * Description: Gaslight Media Catalog Plugin
+ * Version: 0.0.1
+ * Author: Steve Sutton <steve@gaslightmedia.com>
+ * 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"';
+    }
+    ?>
+<input type="checkbox" name="rooms_water" value="yes" <?php echo $checked; ?> />
+    <?php
+
+}
+/**
+ * Rooms_tents
+ *
+ * Add field for the water availability
+ *
+ * @access public
+ * @return void
+ */
+//function rooms_tents() {
+//    global $post;
+//
+//    // Get the features for the post.
+//    $tents = get_post_meta( $post->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 '<input type="hidden" name="roomsmeta-meta-noncename" id="roomsmeta-meta-noncename-loop" value="' . $nonce . '" />';
+
+    // Get the features for the post.
+    $loop = get_post_meta( $post->ID, 'rooms_loop', true );
+    // Output field.
+    if ( !empty( $loop ) ) {
+        $value = "value=".'"'.$loop .'"';
+    }
+
+    ?>
+    <input type="text" name="rooms_loop" <?php echo $value; ?> />
+    <?php
+
+}
+
+/**
+ * Rooms_sewer
+ *
+ * Adds the field for sewer availibility
+ *
+ * @access public
+ * @return void
+ */
+function rooms_sewer() {
+    global $post;
+    $checked = '';
+    // Noncename needed to verify where the data originated.
+    $nonce = wp_create_nonce( 'roomsmeta-meta-noncename' );
+    echo '<input type="hidden" name="roomsmeta-meta-noncename" id="roomsmeta-meta-noncename-sewer" value="' . $nonce . '" />';
+    // Get the features for the post.
+    $sewer = get_post_meta( $post->ID, 'rooms_sewer', true );
+
+    // Output field.
+    if ( "yes" === $sewer ) {
+        $checked = 'checked="checked"';
+    }
+
+    ?>
+    <input type="checkbox" name="rooms_sewer" value="yes" <?php echo $checked; ?> />
+    <?php
+
+}
+/**
+ * Rooms_campers
+ *
+ * Adds the field for camper types
+ *
+ * @access public
+ * @return void
+ */
+function rooms_campers() {
+    global $post;
+
+    // Get the features for the post.
+    $campers = get_post_meta( $post->ID, 'rooms_campers', true );
+    
+    // Output field.
+    if ( !empty( $campers ) ) {
+        $value = "value=".'"'.$campers .'"';
+    }
+    ?>
+    <input type="text" name="rooms_campers" <?php echo $value; ?> />
+    <?php
+}
+/**
+ * Rooms_power
+ *
+ * Adds the field for power availability
+ * @access public
+ * @return void
+ */
+function rooms_power() {
+    global $post;
+    $value = '';
+    // Noncename needed to verify where the data originated.
+    $nonce = wp_create_nonce( 'roomsmeta-meta-noncename' );
+    echo '<input type="hidden" name="roomsmeta-meta-noncename" id="roomsmeta-meta-noncename-power" value="' . $nonce . '" />';
+
+    // Get the features for the post.
+    $power = get_post_meta( $post->ID, 'rooms_power', true );
+    // Output field.
+    if ( !empty( $power ) ) {
+        $value = "value=".'"'.$power .'"';
+    }
+
+    ?>
+    <input type="text" name="rooms_power" <?php echo $value; ?> />
+    <?php
+}
+
+/**
+ * Rooms_save_meta
+ *
+ * Saves the meta fields for the product
+ *
+ * @access public
+ * @return void
+ */
+function rooms_save_meta() {
+    global $post;
+    if ( ! wp_verify_nonce( $_POST['roomsmeta-meta-noncename'], 'roomsmeta-meta-noncename' ) ) {
+        return $post->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'                  => '<input type="checkbox">',
+        '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 '<form id="catSubmit" action=""><div class="row catSearch"><div id="viewBtns" class="12-small medium-3 columns"> <button id="grid" type="button">Grid</button> <button id="list"type=" button">list</button>
+    <span id="productSearch"><a href="' . get_permalink( 510 ) .   '"> Search Products </a></span></div><div id="catDropdown" class="small-12 medium-4 columns">';
+    echo rooms_get_terms_dropdown( $cat_id );
+    echo '</div><div id="searchContainer" class="small-12 medium-3 columns"></form> <form class="searchform" role="search" method="post" action="">
+         <input id="filter" class="search-input" placeholder="SEARCH ' . strtoupper( $name ) . '" value="" autocomplete="off" name="tsearch" type="text">
+         <input id="input" class="search-button" name="searchButton" value="Search" type="submit">
+        
+         <a id="magnifying-glass" class="show-for-large-up" href="#">
+    </a>
+       </form></div></div>';
+
+    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 ="<select id='categoryDropdown' name=\"" . GLM_CATEGORY_NAME . "\"><option value=\"\"> Select " . $main->name . " Sub-category" . "</option>";
+        foreach ( $cats_child as $cat ) {
+          $output .= '<option value="' . $cat . '"';
+           if ( $_REQUEST[ GLM_CATEGORY_NAME ] == $cat ) {
+                $output .= ' selected';
+            }
+            $cat_name = get_term( $cat, GLM_CATEGORY_NAME );
+             $output .= '>' . "&nbsp&nbsp&nbsp" . $cat_name->name. '</option>';
+        }
+        $output .="</select>";
+    } 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 ="<select id='categoryDropdown' name=\"" . GLM_CATEGORY_NAME . "\"><option value=\"\">Select " . GLM_CATEGORY_SINGLE . "</option>";
+        // Get parent categories.
+        foreach ( $parent_terms as $parent ) {   
+            // Get children of each category.
+            $child_terms = get_terms( $taxonomy_name, array('parent'=> $parent->term_id, 'child_of' => $parent->term_id, 'orderby' => 'name', 'hide_empty' => false));
+            $output .= '<option value="' . $parent->term_id . '"';
+            if ( $_REQUEST[ GLM_CATEGORY_NAME ] === $parent->term_id ) {
+                $output .= ' selected';
+            }
+            $output .= '>' . $parent->name . '</option>';
+            foreach ($child_terms as $child ) {
+                $grandchildren = get_terms( $taxonomy_name, array('parent'=> $child->term_id, 'child_of' => $child->term_id, 'orderby' => 'name', 'hide_empty' => false ));
+                 $output .= '<option value="' . $child->term_id . '"';
+                if ( $_REQUEST[ GLM_CATEGORY_NAME ] === $child->term_id ) {
+                    $output .= ' selected';
+                }
+                $output .= '>' . "&nbsp&nbsp&nbsp" .  $child->name . '</option>';
+                foreach ( $grandchildren as $grand_child) {
+                    $great_grandchildren = get_terms( $taxonomy_name, array( 'parent'=> $grand_child->term_id, 'child_of' => $grand_child->term_id, 'orderby' => 'name', 'hide_empty' => false ));
+                    $output .= '<option value="' . $grand_child->term_id . '"';
+                    if ( $_REQUEST[ GLM_CATEGORY_NAME ] === $grand_child->term_id ) {
+                        $output .= ' selected';
+                    }
+                    $output .= '>' . "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp" .  $grand_child->name . '</option>';
+                    foreach ( $great_grandchildren as $great_grandchild ) {
+                        $output .= '<option value="' . $great_grandchild->term_id . '"';
+                    if ( $_REQUEST[ GLM_CATEGORY_NAME ] === $great_grandchild->term_id ) {
+                        $output .= ' selected';
+                    }
+                    $output .= '>' . "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp" .  $great_grandchild->name . '</option>';
+                    }
+                }
+            }
+        }
+        $output .='</select>'; }
+        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' );
+
+