Заказы WooCommerce: возможно ли добавить еще один столбец и заполнить его пользовательскими мета-полями от пользователей? - PullRequest
0 голосов
/ 22 июня 2019

Настолько короткая версия, что я пытаюсь добавить дополнительный столбец на странице заказов и заполнить его настраиваемым полем, которое я создал для пользователей на сайте (имя настраиваемого поля - account_manager)

Я пытаюсь добиться того, чтобы он отображал менеджера по работе с клиентами в столбце в разделе заказов.Немного странный запрос, который я знаю!

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

Любая помощь будет принята с благодарностью.Я не возражаю против того, чтобы пойти, мне просто нужно небольшое руководство:)

Я пробовал это, но он не возвращает никаких значений

function wc_orders_add_account_manager_column($columns)
{
    $new_columns = [];
    foreach ( $columns as $column_name => $column_info ) {
        $new_columns[ $column_name ] = $column_info;
        if ( 'order_status' === $column_name ) {    // Change order_status to manage column orders
            $new_columns['account_manager'] = 'Account Manager';
        }
    }
    return $new_columns;
}
add_filter( 'manage_edit-shop_order_columns', 'wc_orders_add_account_manager_column', 20 );


/**
 * Adds 'account_manager' column content to 'Orders' page
 *
 * @param string $column name of column being displayed
 */
function wc_orders_add_account_manager_column_content($column)
{
   global $post;
    $order_id = $post->ID;

    // Get an instance of the WC_Order object
    $order = wc_get_order($order_id);

    // Get the user ID from WC_Order methods
    $user_id = $order->get_customer_id(); // or $order->get_customer_id();
    $meta = get_user_meta($user_id, 'account_manager', true);

    return $meta;
    if ( 'account_manager' === $columns ) {
        echo $meta ;
    } else {
        echo "Not Valid!";
    }
}
add_action( 'manage_shop_order_posts_custom_column', 'wc_orders_add_account_manager_column_content' );

1 Ответ

1 голос
/ 23 июня 2019

Я предполагаю, что вы сохранили этот 'account_manager' в качестве мета-заказа в таблице postmeta.Вам нужно использовать manage_edit-shop_order_columns фильтр-хук, чтобы добавить новый столбец на страницу заказов администратора, и manage_shop_order_posts_custom_column действие-хук, чтобы заполнить этот столбец.

/**
 * Adds 'account_manager' column header to 'Orders' page immediately after 'Order Status' and before 'Total' column.
 *
 * @param array $columns
 * @return array
 */
function wc_orders_add_account_manager_column($columns)
{
    $new_columns = [];
    foreach ( $columns as $column_name => $column_info ) {
        $new_columns[ $column_name ] = $column_info;
        if ( 'order_status' === $column_name ) {    // Change order_status to manage column orders
            $new_columns['account_manager'] = 'Account Manager';
        }
    }
    return $new_columns;
}
add_filter( 'manage_edit-shop_order_columns', 'wc_orders_add_account_manager_column', 20 );


/**
 * Adds 'account_manager' column content to 'Orders' page
 *
 * @param string $column name of column being displayed
 */
function wc_orders_add_account_manager_column_content($column)
{
    global $post;
    $order      = wc_get_order( $post->ID );
    $user_id    = $order->get_customer_id(); // or $order->get_customer_id();
    $meta       = get_user_meta($user_id, 'account_manager', true);
    if ( 'account_manager' === $column ) {
        echo $meta ? $meta : 'Not Valid!';
    }
}
add_action( 'manage_shop_order_posts_custom_column', 'wc_orders_add_account_manager_column_content' );

Протестировано и работает

Примечание: Как я уже упоминал в комментариях к коду, вы можете изменить порядок столбцов, изменив order_status в этом блоке кода:

if ( 'order_status' === $column_name ) {
    $new_columns['account_manager'] = 'Account Manager';
}

В этом случаенаш новый столбец account_manager будет отображаться после столбца order_status

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...