Администратор заказывает собственный сортируемый столбец в WooCommerce с помощью HPOS

Недавно я обновил веб-сайт Woocommerce для использования HPOS и обнаружил, что пользовательская сортировка столбцов больше не работает. В Woocommerce я настраиваю сортируемый столбец для фамилии клиента. Я скорректировал свой код, чтобы использовать мета_запрос для сортировки заказов на основе _shipping_last_name, но результаты не возвращаются. У меня есть столбец, в котором указано правильное значение фамилии, но функция сортировки не выполняет сортировку.

Вот код сортировки на данный момент:

function hpos_args( $query_vars ) {

    if (isset($query_vars['orderby']) && $query_vars['orderby'] == 'customer_user'){
        $query_vars['meta_query'] = array(array(    'key' => '_shipping_last_name' ));
        $query_vars['orderby'] = array('meta_value' => $query_vars['order']);
    }

    return $query_vars;
}
add_filter( 'woocommerce_order_query_args', 'hpos_args', 10, 1 );

«customer_user» — это заголовок столбца, значения в столбце — это мета_значение для _shipping_last_name.

Прежде чем публиковать свой вопрос, выполните поиск — stackoverflow.com/questions/77366037/…

Snuffy 24.06.2024 15:48

Этот другой вопрос не касается фильтрации по _shipping_last_name, я не могу найти информацию по этому аспекту вопроса. Я использую woocommerce_order_query_args, как упоминается в другом вопросе.

phpcoder 24.06.2024 16:00

@Snuffy OP уже задавал вопрос раньше, который я отметил как дублированный, ссылка на stackoverflow.com/q/77366037/3730754 ветка… Но это не помогает при попытке отфильтровать заказы HPOS по фамилии доставки, как сейчас расположен в таблице БД wp_wc_order_addresses в двух столбцах: address_type и last_name, поэтому их больше нельзя фильтровать как метаданные.

LoicTheAztec 24.06.2024 16:14

Метаданные @phpcoder _shipping_last_name не существуют в заказах HPOS, поскольку теперь они расположены в wp_wc_order_addresses таблице БД в двух столбцах: address_type и last_name, поэтому их больше нельзя фильтровать как метаданные.

LoicTheAztec 24.06.2024 16:16

@LoicTheAztec, исходя из этой информации, какой лучший метод сортировки по Last_name из таблицы wp_wc_order_addresses из woocommerce_order_query_args? или есть другой метод, на который мне следует обратить внимание?

phpcoder 24.06.2024 16:28

@phpcoder Если вы не хотите испортить производительность HPOS, вам следует сохранить «фамилию доставки» в качестве метаданных индивидуального заказа для всех существующих заказов, используя простой запрос SQL через PhpMyAdmin, и реализовать специальный код для новых заказов. Затем вы можете использовать этот пользовательский ключ метаданных для фильтрации ваших заказов с помощью хука woocommerce_order_query_args.

LoicTheAztec 24.06.2024 16:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
6
80
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я сделал, как предложил @LoicTheAztec, и создал собственные метаданные для фамилии отправителя. Затем мне удалось отсортировать столбец с помощью следующего кода:

function hpos_args( $query_vars ) {

    $query_vars['meta_query'] = array(array(    'key' => '_sorting_name' ));
    $query_vars['orderby'] = array('meta_value' => $query_vars['order']);

    return $query_vars;
}

add_filter( 'woocommerce_order_query_args', 'hpos_args', 10, 1 );

У меня возникли проблемы с использованием ключа _shipping_last_name, поэтому я выбрал _sorting_name.

Ответ принят как подходящий

Если у вас есть только один метаключ, просто используйте вместо него аргумент запроса «meta_key».

Кроме того, вам необходимо указать аргумент строки запроса «customer_user» order_by, например:

// Define custom sortable column(s)
add_filter( "woocommerce_shop_order_list_table_sortable_columns", 'custom_admin_order_list_sortable_columns' );
function custom_admin_order_list_sortable_columns( $sortable_columns ) {
    $sortable_columns['customer_user'] = 'customer_user';

    return $customer_user;
}

// Alter the query for custom sortable column(s)
add_filter( 'woocommerce_order_query_args', 'filter_admin_hpos_order_lists', 10, 1 );
function filter_admin_hpos_order_lists( $query_args ) {
    if ( isset($_GET['orderby']) && $_GET['orderby'] === 'customer_user' ) {
        $query_args['meta_key'] = '_sorting_name';
        $query_args['orderby'] = array('meta_value' => $query_args['order']);
    }
    return $query_args;
}

Код находится в файле function.php вашей дочерней темы (или в плагине). Протестировано и работает.

Другие вопросы по теме