2015-12-16 2 views
0

Я добавил пару пользовательских полей столбцов в наш список Woocommerce заказов в админом WordPress, используя следующие методы, но вроде не работает ....WooCommerce сортные колонны не работает

add_filter('manage_edit-shop_order_columns', 'my_wc_columns'); 
function my_wc_columns($columns){ 
    $new_columns = (is_array($columns)) ? $columns : array(); 
    unset($new_columns['order_actions']); 
    $new_columns['program_id'] = 'Program'; 
    $new_columns['constituent_id'] = 'Constituent ID'; 
    $new_columns['order_actions'] = $columns['order_actions']; 
    return $new_columns; 
} 
add_action('manage_shop_order_posts_custom_column', 'my_wc_column_values', 2); 
function my_wc_column_values($column){ 
    global $post; 
    if ($column == 'program_id') { 
     $program = get_post_meta($post->ID, '_program_id', true); 
     $program_title = get_the_title($program); 
     $column_val = (isset($program) && $program>0 ? $program_title : 'All'); 
     echo '<span>' . my_programs_get_name($column_val) . ' (' . $program . ')</span>'; 
    } 
    if ($column == 'constituent_id') { 
     $consid = get_post_meta($post->ID, 'constituent_id', true); 
     $column_val = (isset($consid) && $consid != "") ? $consid : ""; 
     echo '<span>' . $column_val . '</span>'; 
    } 
} 
// Make column sortable 
add_filter("manage_edit-shop_order_sortable_columns", 'my_wc_column_sort'); 
function my_wc_column_sort($columns) { 
    $custom = array(
     'program_id' => '_program_id', 
     'constituent_id' => 'constituent_id', 
    ); 
    return wp_parse_args($custom, $columns); 
} 

Я ожидал, что у вас есть проблема с именем программы, так как это идентификатор, который нужно перевести с помощью настраиваемой функции в имя, но ни один столбец не сортируется правильно. Записи меняют порядок после нажатия на заголовки столбцов, но я не могу сказать, как выполняется сортировка. Программа не сортируется по имени или идентификатору, и оба кажутся случайными, но последовательными. Имейте в виду, что оба поля - это настраиваемые поля, которые могут иметь или не иметь определенное значение. Как я могу сделать эту сортировку?

ответ

0

Вот хороший учебник по custom sortable columns. После регистрации столбца вам необходимо обработать фактическую сортировку. К сожалению, эта часть не происходит автоматически. Непроверенный, но адаптированный из приведенного выше урока:

add_action('pre_get_posts', 'manage_wp_posts_be_qe_pre_get_posts', 1); 
function manage_wp_posts_be_qe_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 'program_id' 
     case 'program_id': 

      // set our query's meta_key, which is used for custom fields 
      $query->set('meta_key', '_program_id'); 

      /** 
      * Tell the query to order by our custom field/meta_key's 
      * value 
      * 
      * If your meta value are numbers, change 'meta_value' 
      * to 'meta_value_num'. 
      */ 
      $query->set('orderby', 'meta_value'); 

      break; 

     } 

    } 

} 
+0

Очень хорошо, вы всегда даете мне правильные указатели, спасибо. У меня есть одна проблема, если вы могли бы помочь. Сортировка работает, но она отфильтровывает любые значения пустой мета. Одной из основных причин, по которым я хочу сортировать по этому столбцу, является сортировка пробелов для определения значений потребности. – rwfitzy

+0

Добро пожаловать. Сортировка элементов со значением и без значения может быть очень сложной. У меня есть * код, который * может * работать. Я не тестировал его и должен проверить, что у меня его еще нет. – helgatheviking

Смежные вопросы