#php #wordpress #woocommerce #hook-woocommerce #wordpress-hook
Вопрос:
У меня есть настраиваемый столбец для сортировки в панели администратора WooCommerce. В этом столбце я возвращаю значение из определенного атрибута. Все работает нормально, за исключением того, что сортировка не показывает товары без этого атрибута
Так что теперь мы можем называть это только фильтрацией, а не сортировкой. И в этом-то вся проблема. Я хотел бы получить классическую функцию сортировки, которая сначала покажет элементы с этим значением, но ниже остальных элементов без этого значения.
Вероятно, проблема заключается в неправильной обработке запроса в pre_get_posts
?
В настоящее время мои функции заключаются в следующем:
/** * Add custom column */ function append_column($columns) { $columns['attribute_special'] = 'Special'; return $columns; } add_filter('manage_edit-product_columns', 'append_column'); /** * Make column sortable */ function column_sortable($columns) { $columns['attribute_special'] = 'Special'; return $columns; } add_filter('manage_edit-product_sortable_columns', 'column_sortable'); /** * Display term value in column */ function get_value($column, $product_id) { if ($column == 'attribute_special') { $wooTerms = wc_get_product_terms($product_id, 'pa_status', ['fields' =gt; 'slugs']); if (in_array('special', $wooTerms)) { echo 'Special'; } } } add_action('manage_product_posts_custom_column', 'get_value', 10, 2); /** * Sort query */ function query_order($query) { global $post_type, $pagenow; if ( is_admin() amp;amp; $post_type == 'product' amp;amp; $pagenow == 'edit.php' amp;amp; (!empty($_GET['orderby']) || !empty($_GET['order'])) amp;amp; $_GET['orderby'] == 'Special' ) { $tax_query = $query-gt;get('tax_query'); if (!is_array($tax_query)) { $tax_query = []; } $taxquery[] = [ 'taxonomy' =gt; 'pa_status', 'field' =gt; 'slug', 'terms' =gt; 'special', ]; $query-gt;set('tax_query', $taxquery); } } add_action('pre_get_posts', 'query_order');