WooCommerce: как я могу получить заказы с пользовательским идентификатором в объекте метаданных заказа? - PullRequest
0 голосов
/ 02 октября 2018

Из-за проекта мне нужна помощь от вас.Я много искал, но не могу найти решение.Я пытаюсь отредактировать функцию WooCommerce с именем

  • woocommerce_account_orders


Я добавил поле

  • mycustom_id

в объект метаданных ордеров, потому что мне нужно получить все ордера с текущимавторизовался пользователь в поле mycustom_id:

  • (mycustom_id = current_user_id ())


Чекдля customer должно остаться.Мне просто нужно добавить этот другой current_user_id чек.

Это должно остаться без изменений:

  • 'customer' => get_current_user_id ()


.Это мой не работающий фрагмент кода:

function woocommerce_account_orders( $current_page ) {
    $current_page    = empty( $current_page ) ? 1 : absint( $current_page );
    $customer_orders = wc_get_orders( apply_filters( 'woocommerce_my_account_my_orders_query', array(
        'customer' => get_current_user_id(),
        'mycustom_id' => get_current_user_id(),
        'page'     => $current_page,
        'paginate' => true,
    ) ) );

    wc_get_template(
        'myaccount/orders.php',
        array(
            'current_page'    => absint( $current_page ),
            'customer_orders' => $customer_orders,
            'has_orders'      => 0 < $customer_orders->total,
        )
    );
}

Метод находится в: https://docs.woocommerce.com/wc-apidocs/source-function-woocommerce_account_orders.html#2465-2486


Как добавить эту функцию в функцию таким умным способом, как фильтри как я могу передать свой пользовательский параметр правильный путь к функции?Я сохранил параметр как атрибут order_meta:

[5] => WC_Meta_Data Object (
     [current_data:protected] => Array (
          [id] => 3477
          [key] => mycustom_id
          [value] => 2
)

Спасибо за вашу помощь.Я так много пробовал, но я новичок в PHP и должен много копаться ..

1 Ответ

0 голосов
/ 02 октября 2018

Если вы хотите изменить этот запрос, вы можете сделать это, вызвав фильтр woocommerce_my_account_my_orders_query вместо изменения основной функции, чтобы вы могли достичь требуемого значения следующим образом:

add_filter( 'woocommerce_my_account_my_orders_query', 'modify_my_order_query', 10, 1 );

function modify_my_order_query( $q ) {
    $q['customer'] = [ 1, 3 ]; // you customers ids here 

    return $q;
}

, но эта функция вышебудет отображать заказ только в списке, и если клиент щелкнет по этому заказу, чтобы просмотреть подробности, он получит сообщение об ошибке, поскольку у него нет разрешения на просмотр заказа, и вам нужно изменить возможность view_order * 1006.*

например, вы можете дать пользователю с ID 1 разрешение на просмотр ID 3 заказов следующим образом:

function give_permissions( $allcaps, $cap, $args ) {
    $user = 3; //user id 
    if ( $cap[0] == 'view_order' ) {
        $allcaps[ $cap[0] ] = true;
    }
    return ( $allcaps );
}
add_filter( 'user_has_cap', 'give_permissions', 10, 3 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...