Я пытаюсь показать настраиваемое поле, добавленное ко всем заказам, сделанным из внешнего интерфейса сайта, под названием «Handleby» со значением «внешний интерфейс» через настраиваемый столбец на странице заказов администратора.Я смог создать пользовательский столбец, но не смог заполнить его значением моего поля.
Я следую этому руководству от SkyVerge , для WooCommerce 3.0 +
Это создает настраиваемое поле и автоматически присваивает его заказам, сделанным из внешнего оформления:
/* Add custom field for orders created from the front-end */
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order->update_meta_data( 'Handleby', 'frontend' );
}
Это создает настраиваемый столбец:
/**
* Add column "Handled By" on orders page to filter for front-end orders
*
* @param string[] $columns
* @return string[] $new_columns
*/
function add_order_handleby_column_header($columns) {
$new_columns = array();
foreach($columns as $column_name => $column_info) {
$new_columns[ $column_name ] = $column_info;
// Create a new column named "Handled By" after the Status column
if('order_status' === $column_name) {
$new_columns['order_handleby'] = __('Handled By', 'my-textdomain');
}
}
return $new_columns;
}
add_filter('manage_edit-shop_order_columns', 'add_order_handleby_column_header', 20);
/* End add "Handled By" column */
Это вспомогательная функция для получениямета из «Handleby»:
/* Helper function used to get custom meta "Handleby" */
if(!function_exists('get_order_handleby_meta')) :
/**
* Function to get meta from an order
*
* @param \WC_Order $order the order
* @param string $key the meta key
* @param bool $single whether to get the meta as a single item. Defaults to 'true'
* @param string $context if 'view' then the value will be filtered
* @return mixed the order property
*/
function get_order_handleby_meta($order, $key = '', $single = true, $context = 'edit') {
// For WooCommerce 3.0 or later
if(defined('WC_VERSION') && WC_VERSION && version_compare(WC_VERSION, '3.0', '>=')) {
$value = $order->get_meta($key, $single, $context);
} else {
// Have $order->get_id() check here in case WC_VERSION isn't defined correctly
$order_id = is_callable(array($order, 'get_id')) ? $order->get_id() : $order->id;
$value = get_post_meta($order_id, $key, $single);
}
return $value;
}
endif;
/* End of helper function to get meta */
Попытка заполнить столбец мета-значениями.Я полагаю, что именно здесь я ошибся:
/**
* Adds "Handled By" column content to the orders page after the Status column
*
* @param string[] $column name of column being displayed
*/
function add_order_handleby_column_content($column) {
global $post;
if('order_handleby' === $column) {
$order = wc_get_order($post->ID);
$handleby = get_order_handleby_meta($order, 'Handleby');
echo $handleby;
}
}
add_action('manage_shop_order_posts_custom_column', 'add_order_handleby_column_content');
/* End of adding column content */
И, наконец, этот стиль столбца:
/**
* Adjust the appearance for the new "Handle By" column.
*/
function add_order_handleby_column_style() {
$css = '.widefat .column-order_status, .widefat .column-order_handleby { width: 9%; }';
wp_add_inline_style('woocommerce_admin_styles', $css);
}
add_action('admin_print_styles', 'add_order_handleby_column_style');
echo $handleby
, вероятно, там, где я ошибся.
Если кто-нибудь может указать мне правильное направление, это было бы очень полезно.Спасибо!