使用类别属性的快捷码和WP查询

时间:2019-06-13 作者:Dan Sutherland

我正在尝试创建一个显示外卖业务网站自定义查询(调用菜单项)结果的快捷码。我已经尝试让类别属性发挥作用,以便在主页上可以使用[himenu cat=“special offers”],这是我用来显示特价商品的类别的鼻涕虫。这很好,没有问题,但是我正在努力实现以下内容(如下面的代码所示)

1-在“完整菜单”页面上,我想使用显示所有菜单项的相同快捷码,只需将cat属性留空2-在完整菜单页面上,列出相应类别标题下的所有菜单项,例如:。

BURGERSitem 1项目2项目3项目4

烤肉串1项目2项目3

我已经为自定义帖子类型设置了类别,所以我想我需要找到类别并在查询运行之前循环它们?任何建议都很好,我花了整整一个上午在thsi上都没有成功。

谢谢

//MENU SHORTCODE
add_shortcode( \'himenu\', \'cat_post\' );

function cat_post($atts){

    // attributes for shortcode
   if (isset($atts[\'cat\'])) {$cat = $atts[\'cat\'];} else {return;}
   if (isset($atts[\'posts_per_page\'])) {$posts_per_page = $atts[\'posts_per_page\'];} else {$posts_per_page = -1;}

   // get the category posts
   $category = get_category_by_slug($cat);
   if (!is_object($category)) {return;}

   $args = array(
        \'cat\' => $category->term_id,
        \'post_type\' => menu_item,
        \'posts_per_page\' => $posts_per_page,
        \'order\' => \'ASC\',
        \'orderby\' => \'title\'
   );

$query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post(); ?>   

            <div class="indi-menu-item"> 
                <div class="menu-item-column">
                    <h5> <?php  
                    if($cat === \'special-offers\'){
                        echo \'Special Offers\';
                    } else {
                        the_category();
                    }
                     ?></h5>
                    <div class="menu-item-meta">
                        <h4> <?php the_title(); ?></h4>                    
                        <p><?php the_field(\'description\')?></p>
                    </div>
                </div>
                <div class="menu-item-column">
                    <h2>£<?php the_field(\'price\'); ?></h2>
                </div>
            </div>    


       <?php endwhile;
        wp_reset_postdata(); // reset the query 

}

    wp_reset_query();//reset the global variable related to post loop
     ?>

1 个回复
SO网友:Dan Sutherland

我找到了这个问题的答案。使用原始代码的简化版本,我可以传入一个类别以仅显示该类别,如果为空,则显示所有类别。然后,foreach条件遍历所有可用类别,并在查询期间耗尽每个类别中的帖子。

我希望这在某些方面对某人有所帮助:)

//MENU SHORTCODE
add_shortcode(\'himenu\', \'create_menu_shortcode\');

function create_menu_shortcode ($atts){ 

    $atts = shortcode_atts(
        array(
            \'category\' => \'\'
        ), $atts, \'himenu\' );

        $category = $atts["category"];

?> <?php    
            var_dump ($atts);
            var_dump ($category);

            $args_cat = [
                \'orderby\' => \'name\',
                \'order\' => \'ASC\',
                \'hide_empty\' => 0,
                        ];

            $menu_categories = get_categories($args_cat);
            //print_r($categories);

            if (!empty($menu_categories)):
            foreach ($menu_categories as $menu_category):

            $args = [
            \'post_type\' => \'menu_item\',
            \'posts_per_page\' => -1,
            \'order\' => \'ASC\',
            \'orderby\' => \'title\',
            \'category_name\' => $category,
            \'cat\' => $menu_category->term_id
        ];      

        $query = new WP_Query($args);
        while ($query->have_posts()) : $query->the_post(); ?>   

            <div class="indi-menu-item"> 
                <div class="menu-item-column">
                    <h5> <?php  the_category(); ?></h5>
                    <div class="menu-item-meta">
                        <h4> <?php the_title(); ?></h4>                    
                        <p><?php the_field(\'description\')?></p>
                    </div>
                </div>
                <div class="menu-item-column">
                    <h2>£<?php the_field(\'price\'); ?></h2>
                </div>
            </div>    


       <?php endwhile;
        wp_reset_postdata();
     endforeach;
endif;?>
</div>

<?php } ?>



    <?php wp_reset_query();//reset the global variable related to post loop
     ?>

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。