2017-10-04 25 views
0

標準のWooCommerceプロダクトウィジェットのようなWooCommerceプロダクトウィジェットを作成したいと思いますが、カテゴリでフィルタリングするオプションがあります。私は特定のカテゴリの製品を表示するためのショートコードがあることを知っていますが、私は標準的なサムネイルビューが気に入らないのですが、WooCom製品ウィジェットのようなリストを持つことを好みます。 Githubの上カテゴリフィルタ付きのWoocommerceプロダクトウィジェットの作成

、私はWooCom製品は、製品IDのフィルタでウィジェットを追加することを可能にする、次のコードを発見した:

<?php 
/* 
Plugin Name: Woocommerce Custom Widget Product 
Description: This plugin help display a list of customs products on your website 
Author: Binh Nguyen 
Version: 1.0 
Author URI: http://vietcomic.net/ 
*/ 


if (! defined('ABSPATH')) exit; // Exit if accessed directly 

class Bi_Widget_Product extends WP_Widget 
{ 

    function __construct() 
    { 
     parent::__construct(
       'woocommerce_ndbProducts', 
       __('WP Customs Products', 'ndb'), 
       array('description' => __('This plugin help display a list of customs products on your website.', 'ndb')) 
       ); 
    } 

    public function widget($args, $instance) { 

     extract($args); 
     $title = apply_filters('widget_title', $instance['title']); 
     $ids = $instance['ids']; 
     $arr_id = explode(',',$ids); 
     $query_args = array(
      'post_status' => 'publish', 
      'post_type'  => 'product', 
      'no_found_rows' => 1, 
      'post__in'  => $arr_id 
     ); 

     $r = new WP_Query($query_args); 
     if ($r->have_posts()) { 

      echo $before_widget; 

      if ($title) 
       echo $before_title . $title . $after_title; 

      echo '<ul class="product_list_widget">'; 

      while ($r->have_posts()) { 
       $r->the_post(); 
       global $product; 
       ?> 
        <li> 
         <a href="<?php echo esc_url(get_permalink($product->id)); ?>" title="<?php echo esc_attr($product->get_title()); ?>"> 
          <?php echo $product->get_image(); ?> 
          <?php echo $product->get_title(); ?> 
         </a> 
         <?php if (! empty($show_rating)) echo $product->get_rating_html(); ?> 
         <?php echo $product->get_price_html(); ?> 
        </li> 
       <?php 
      } 

      echo '</ul>'; 

      echo $after_widget; 
     } 

     wp_reset_postdata(); 

     echo $content; 

    } 
    // Widget Backend 

    public function form($instance){ 
     $title = (isset($instance['title'])) ? $instance['title'] : __('Products', 'ndb'); 
     $ids = $instance['ids']; 
     ?> 
     <p> 
      <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title :'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /> 
     </p> 
     <p> 
      <label for="<?php echo $this->get_field_id('ids'); ?>"><?php _e('IDs :'); ?></label> 
      <input class="widefat" id="<?php echo $this->get_field_id('ids'); ?>" name="<?php echo $this->get_field_name('ids'); ?>" type="text" value="<?php echo esc_attr($ids); ?>" /> 
     </p> 
     <?php 

    } 

    public function update($new_instance, $old_instance) { 
     $instance = array(); 
     $instance['title'] = (! empty($new_instance['title'])) ? strip_tags($new_instance['title']) : ''; 
     $instance['ids'] = (! empty($new_instance['ids'])) ? strip_tags($new_instance['ids']) : ''; 
     return $instance; 
    } 


} 



add_action('widgets_init', function(){ 
    register_widget('Bi_Widget_Product'); 
}); 

あなたの任意のWordpressの教祖のヘルプ私はので、私はフィルタリングすることができ、これを適応することはでき製品IDの代わりにカテゴリにありますか?私は自分で試してみるが、間違いなくあなたの助けを使うことができる。

答えて

1

あなたは彼らがあなたが

<?php 
    $terms = get_terms(array ('taxonomy' => 'product_cat', 'hide_empty' => false, 'parent' => 0, 'orderby' => 'description', 'order' => 'ASC')); 

    foreach ($terms as $term) { 
     echo $name = $term->name; 
    } 
?> 

ソリューション2 get_terms()クエリなどを使用する必要があるカテゴリを探している場合:

<?php 

//loop the names of the slugs for the country_categories 
$terms = get_terms(array ('taxonomy' => 'country_categories', 'hide_empty' => false, 'parent' => 0, 'orderby' => 'date', 'order' => 'DESC')); 
foreach ($terms as $term) { 
    //get category slug variables to use in your loop args 
    $slug = $term->slug; 

    $posts_args = array(
    'post_type'   => 'product', 
    'posts_per_page' => -1, 
    'tax_query'   => array(
     'relation' => 'AND', 
     array (
      'taxonomy' => 'product_cat', 
      'field' => 'slug', 
      'terms' => $slug, 
    ) 
    ), 
); 

    $posts_query = new WP_Query($posts_args); 
    if($posts_query->have_posts()): 

    //Each div will have the particular category and its posts. The id and class will also have the slug name 
    echo '<div id="' . $slug . '" class="' . $slug . '"> 
      <h1 class="text-center">' . $term->name . '</h1> 
      while($posts_query->have_posts()): $posts_query->the_post(); 
       get_template_part('template-parts/content', get_post_format()); 
      endwhile; 
    echo '</div>'; 
    endif; 
    } 
    ?> 
+0

ご返信いただきありがとうございます。だから私はどのように特定のカテゴリを持つ製品を取得するウィジェットでこれを実装する必要がありますか? &カテゴリのメソッドはなぜ機能しないのですか? WP codex:https://codex.wordpress.org/Class_Reference/WP_Query - > Category Parametersのパラグラフを参照してください。 – BarrieO

+0

厳密に上記の方法はタクソノミーを探し、用語の詳細を示します。あなたは 'var_dump()'を見ればこれらを見ることができますが、このコードを共有して特定のカテゴリの特定の製品投稿を得ることができます。文字の制限は私を許可しませんが、ソリューション2の上記の答えを確認します。私はそれを編集しました。 – omukiguy

関連する問題