2017-06-27 13 views
0

今後のコンサートのリストを表示したいと思います。 すべてのコンサートには、日付と場所という2つの属性があります。カスタム日付フィールドでWooCommerceのバリエーションを並べ替える

私はすべてのバリエーションを表示して次のコンサートを見ようとしました。このソリューションで

<?php 
    global $woocommerce, $product, $post, $re_wcvt_options; 
    $available_variations = $product->get_available_variations(); 
    $attributes = $product->get_attributes(); 
?> 
<ul> 
    <?php foreach ($available_variations as $prod_variation) : ?> 
     <?php 
      // get some vars to work with 
      $post_id = $prod_variation['variation_id']; 
      $post_object = get_post($post_id); 
     ?> 
     <li> 
     <?php foreach ($prod_variation['attributes'] as $attr_name => $attr_value) : ?> 
      <?php 
       // Get the correct variation values 
       if (strpos($attr_name, '_pa_')){ // variation is a pre-definted attribute 
        $attr_name = substr($attr_name, 10); 
        $attr = get_term_by('slug', $attr_value, $attr_name); 
        $attr_value = $attr->name; 
       } else { // variation is a custom attribute 
       } 
       echo $attr_value; 
      ?> 
     <?php endforeach;?> 
     </li> 
    <?php endforeach;?> 
</ul> 

proplemが、それが唯一の製品の中に一つだけの製品のために働くということである: これは私がこれまで行ってきたものです。場所と日付が異なる複数のコンサート(製品)のリストを表示できませんでした(バリエーション)。

私はループを使って製品/コンサートを表示し、日付を含むカスタムフィールドでソートしようとしました。

これまで、単純なカスタムポストタイプでこれを行ってきました。 これはそのための解決策だった:

<?php 
$today_query = date ('Ymd'); 
$args = array(
    'post_type'    => array('concert'), 
    'posts_per_page'   => '10', 
    'meta_key' => 'date', 
    'meta_compare' => '>=', 
    'meta_value' => $today_query, 
    'orderby' => 'meta_value', 
    'order' => 'ASC', 
); 
$query = new WP_Query($args); ?> 

コードは、メタフィールドでの投稿を注文し、将来的には唯一のコンサートを示しています。 私が理解できない唯一のことは、単一のバリエーションからメタフィールドを使用する方法です。

誰にでも解決策がありますか?

答えて

0

pre_get_posts hook

add_action('pre_get_posts', 'sort_products'); 

function sort_products($query) 
{ 
    // If inside dashboard, skip sorting 
    if (is_admin()){ 
     return; 
    } 
    // Check of query have woocommerce post type 
    if (is_post_type_archive('product')){ 
     $query->set('meta_key', 'date'); 
     $query->set('meta_compare' , '>='); 
     $query->set('meta_value' , time()); 
     $query->set('orderby', 'meta_value'); 
    } 
    return $query; 
} 
を使用してみてください