2016-12-29 6 views
1

私は、投稿/ product_idをシリアル化して格納するカスタムpostmetaフィールドを持っています。例_related_ids =>a:4:{i:0;i:2462;i:1;i:2466;i:2;i:2469;i:3;i:2472;}WooCommerceカスタム製品列Sortable Backed not working

WooCommerce Product Listing画面(Backed)で_related_idsのproduct_id countが表示されていますが正常です。今私はその列をソート可能にしたい。だから、私はにフックされている関数related_product_col_sortを書きます。列の短絡が機能していません。 (動作していないということは、product_idが正しくカウントされていないことを意味します)

はここで誰もがrelated_product_col_sort機能で正しいロジック/コードで私を助けることができる私の完全なコード

//_related_ids => a:4:{i:0;i:2462;i:1;i:2466;i:2;i:2469;i:3;i:2472;} 
//manage_product_posts_custom_column 
add_filter('manage_edit-product_columns', 'related_product_col'); 

function related_product_col($columns) { 
    $new_columns = (is_array($columns)) ? $columns : array(); 
    $new_columns['RELATED'] = 'Related Product'; 
    return $new_columns; 
} 

add_action('manage_product_posts_custom_column', 'related_product_col_data', 2); 

function related_product_col_data($column) { 
    global $post; 
    $related_product_ids = get_post_meta($post->ID, '_related_ids', true); 
    if ($column == 'RELATED') { 
     if (isset($related_product_ids) && !empty($related_product_ids)) { 
      echo count($related_product_ids); 
     } else { 
      echo "--"; 
     } 
    } 
} 

add_filter("manage_edit-product_sortable_columns", 'related_product_col_sort'); 

function related_product_col_sort($columns) { 
    $custom = array(
     'RELATED' => '_related_ids' 
    ); 
    return wp_parse_args($custom, $columns); 
} 

です。

ありがとうございました。

答えて

0

ロングアンサーshort - 基本的に、meta_valueをソートする必要がある場合は、シリアル化することはできません。チェックhttps://wordpress.stackexchange.com/questions/87265/order-by-meta-value-serialized-array

私は、あなたに最適な解決策は、関連する製品の数を新しいmeta_keyに保存し、それを使って列を並べ替えることだと思います。

列がシリアル化された配列ではなく通常のデータである場合、データを並べ替える手順を以下に示します。

は、ソート可能なカスタム列

  1. あなたは manage_{YOUR_SCREEN_ID}_sortable_columnsフィルタを使用するようにソート可能な列を登録するには、ソートロジック

を実装としてソート可能な列を登録を行うために、実際に2つのステップがあります列を追加する

related_product_col_sort関数を使用して既に列を登録していますソート機能には、データのタイプに応じていくつかの方法があります。

データが数値または単純なアルファベットである場合は、pre_get_postsアクションを使用することができ、あなたのソート値は日付

add_filter('posts_clauses', 'manage_wp_posts_my_custom_posts_clauses', 1, 2); 
function manage_wp_posts_my_custom_posts_clauses($pieces, $query) { 
    global $wpdb; 

    /** 
    * We only want our code to run in the main WP query 
    * AND if an orderby query variable is designated. 
    */ 
    if ($query->is_main_query() && ($orderby = $query->get('orderby'))) { 

     // Get the order query variable - ASC or DESC 
     $order = strtoupper($query->get('order')); 

     // Make sure the order setting qualifies. If not, set default as ASC 
     if (! in_array($order, array('ASC', 'DESC'))) 
     $order = 'ASC'; 

     switch($orderby) { 

     // If we're ordering by release_date 
     case 'RELATED': 

      /** 
      * We have to join the postmeta table to 
      * include our release date in the query. 
      */ 
      $pieces[ 'join' ] .= " LEFT JOIN $wpdb->postmeta wp_rd ON wp_rd.post_id = {$wpdb->posts}.ID AND wp_rd.meta_key = '_related_ids'"; 

      // This will only work if the meta_value is a date. 
      $pieces[ 'orderby' ] = "STR_TO_DATE(wp_rd.meta_value,'%m/%d/%Y') $order, " . $pieces[ 'orderby' ]; 

     break; 

     } 

    } 

    return $pieces; 

} 
+0

のような、より複雑である場合meta_keyorderby

add_action('pre_get_posts', 'manage_wp_posts_my_custom_pre_get_posts', 1); function manage_wp_posts_my_custom_pre_get_posts($query) { /** * We only want our code to run in the main WP query * AND if an orderby query variable is designated. */ if ($query->is_main_query() && ($orderby = $query->get('orderby'))) { switch($orderby) { // If we're ordering by 'film_rating' case 'RELATED': // set our query's meta_key, which is used for custom fields $query->set('meta_key', 'RELATED'); /** * Tell the query to order by our custom field/meta_key's * This will only work is the meta_value for the RELATED key is either a number or a simple string */ $query->set('orderby', 'meta_value'); break; } } } 

を設定すると思います私は間違っている点を得て、これを試してみて、あなたを更新します。私はシリアル化された方法で値を格納する関連製品のプラグインを使用しています。私は、プラグインを編集して、ソート可能なロジックをはるかに簡単にする必要があると思います。ありがとう。 –

関連する問題