0

I am looking to show specific dishes that belong to specific menu.

I've created a "dishes" custom post. I've created a custom "menu" taxonomy, with 3 types of menus ('premium', 'children', 'concept') How do I create conditional syntax in the loop to search for that menu type and loop those posts that belong to that menu type?

custom post

function custom_post_type_food_dish()
{
    $labels = array(
        'name' => _x('Dishes', 'Post Type General Name', 'text_domain'),
        'singular_name' => _x('Dish', 'Post Type Singular Name', 'text_domain'),
        'menu_name' => __('Dishes', 'text_domain'),
        'name_admin_bar' => __('Dish', 'text_domain'),
        'archives' => __('Item Archives', 'text_domain'),
        'attributes' => __('Item Attributes', 'text_domain'),
        'parent_item_colon' => __('Parent Item:', 'text_domain'),
        'all_items' => __('All Items', 'text_domain'),
        'add_new_item' => __('Add New Item', 'text_domain'),
        'add_new' => __('Add New', 'text_domain'),
        'new_item' => __('New Item', 'text_domain'),
        'edit_item' => __('Edit Item', 'text_domain'),
        'update_item' => __('Update Item', 'text_domain'),
        'view_item' => __('View Item', 'text_domain'),
        'view_items' => __('View Items', 'text_domain'),
        'search_items' => __('Search Item', 'text_domain'),
        'not_found' => __('Not found', 'text_domain'),
        'not_found_in_trash' => __('Not found in Trash', 'text_domain'),
        'featured_image' => __('Featured Image', 'text_domain'),
        'set_featured_image' => __('Set featured image', 'text_domain'),
        'remove_featured_image' => __('Remove featured image', 'text_domain'),
        'use_featured_image' => __('Use as featured image', 'text_domain'),
        'insert_into_item' => __('Insert into item', 'text_domain'),
        'uploaded_to_this_item' => __('Uploaded to this item', 'text_domain'),
        'items_list' => __('Items list', 'text_domain'),
        'items_list_navigation' => __('Items list navigation', 'text_domain'),
        'filter_items_list' => __('Filter items list', 'text_domain'),
    );
    $args = array(
        'label' => __('Dish', 'text_domain'),
        'description' => __('food_dish is the dishes that go into the menu', 'text_domain'),
        'labels' => $labels,
        'supports' => array('title', 'editor', 'excerpt', 'thumbnail', 'comments', 'post-formats',),
        //'taxonomies'            => array( 'category', 'post_tag' ),
        'hierarchical' => false,
        'public' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'menu_position' => 5,
        'show_in_admin_bar' => true,
        'show_in_nav_menus' => true,
        'can_export' => true,
        'has_archive' => true,
        'exclude_from_search' => false,
        'publicly_queryable' => true,
        'capability_type' => 'page',
        'menu_icon' => 'dashicons-image-filter',
    );
    register_post_type('food_dish', $args);

}
add_action('init', 'custom_post_type_food_dish', 0);

custom taxonomy

function add_custom_taxonomies()
{
    // Add new "Menus" taxonomy to Posts
    register_taxonomy('menu', 'food_dish', array(
        // Hierarchical taxonomy (like categories)
        'hierarchical' => true,
        // This array of options controls the labels displayed in the WordPress Admin UI
        'labels' => array(
            'name' => _x('Menus', 'taxonomy general name'),
            'singular_name' => _x('Menu', 'taxonomy singular name'),
            'search_items' => __('Search Menus'),
            'all_items' => __('All Menus'),
            'parent_item' => __('Parent Menu'),
            'parent_item_colon' => __('Parent Menu:'),
            'edit_item' => __('Edit Menu'),
            'update_item' => __('Update Menu'),
            'add_new_item' => __('Add New Menu'),
            'new_item_name' => __('New Menu Name'),
            'menu_name' => __('Menus'),
        ),
        // Control the slugs used for this taxonomy
        'rewrite' => array(
            'slug' => 'menus', // This controls the base slug that will display before each term
            'with_front' => false, // Don't display the category base before "/locations/"
            'hierarchical' => true, // This will allow URL's like "/locations/boston/cambridge/"
        ),
    ));
}

add_action('init', 'add_custom_taxonomies', 0);

the HTML/PHP part in the template:

<div class="container-fluid">
                <?php
                $args = array(
                    'post_type' => 'food_dish',
                    'taxonomy_name' => 'menu'
                );
                $loop = new WP_Query($args);
                while ($loop->have_posts()) : $loop->the_post();
                    //prePrint($loop);
                    if ( in_category( 'premium' ) ) {
                        ?>
                        <a href="<?php the_permalink() ?>">
                            <div class="row">
                                <div class="col-md-3">
                                    <?php the_post_thumbnail('medium', array('class' => 'img-responsive')); ?>
                                </div>
                                <div class="col-md-6">
                                    <p><?php the_excerpt() ?></p>
                                </div>
                                <div class="col-md-3">
                                    <h3><?php the_title(); ?></h3>
                                </div>
                            </div>
                    </a>
                    <?php
                }
            endwhile; ?>
        </div>
1

So basically your question can also be put as: show all posts if the post have been assigned any term from taxonomy.

SO this code shoudl do :

$args = array(
    'post_type' => 'food_dish',
    'tax_query' => array(
        array(
            'taxonomy' => 'menu',
            'field'    => 'name',
            'terms'    => array('premium', 'children', 'concept'),
        ),
    ),
);  

If you feel that in future more ters will be added to taxonomy 'menu' then you can retreive all terms for taxonomy term and assign them as an array to terms in tax query

  • I've put those $args in replacing the old $args, now I don't get any post output to page. – clusterBuddy Jul 17 '17 at 14:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.