Я пытаюсь добавить новое мета-поле на страницу заказа woocommerce на панели управления.
add_action( 'add_meta_boxes', 'add_meta_box_wrapper' );
function add_meta_box_wrapper() {
add_meta_box( 'custom_meta_box', __( 'Facture' ), 'metabox_content', 'shop_order', 'side', 'core');
}
function metabox_content() {
echo '<a>Test button</a>';
}
Это код, который я пробовал, но он не работает.
Если я изменю четвертый параметр функции add_meta_box на публикацию, я смогу отобразить его на странице редактирования публикации, поэтому проблема должна быть в используемом мной пуле. Я также попробовал изменить этот параметр на «wc-orders», а также изменить хук действия на «add_meta_boxes_shop_order» и «add_meta_boxes_wc-orders», как некоторые люди предлагают в других темах, но, похоже, ничего не работает.
У кого-нибудь есть идея?
Кажется, это тоже не работает. Я также попробовал добавить его в хук действия, как сказано в документации, но это ничего не меняет. Developer.wordpress.org/reference/hooks/add_meta_boxes
Эта проблема связана с тем, что Высокопроизводительное хранилище заказов (HPOS) включено, поэтому вам нужно что-то немного другое, чтобы добавить пользовательский Metabox к заказам администратора:
use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
// Add a custom metabox
add_action( 'add_meta_boxes', 'admin_order_custom_metabox' );
function admin_order_custom_metabox() {
$screen = class_exists( '\Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController' ) && wc_get_container()->get( CustomOrdersTableController::class )->custom_orders_table_usage_is_enabled()
? wc_get_page_screen_id( 'shop-order' )
: 'shop_order';
add_meta_box(
'custom',
'Custom Meta Box',
'custom_metabox_content',
$screen,
'side',
'high'
);
}
// Metabox content
function custom_metabox_content( $object ) {
// Get the WC_Order object
$order = is_a( $object, 'WP_Post' ) ? wc_get_order( $object->ID ) : $object;
echo '<p>Number (ID): '.$order->get_order_number().'<p>';
echo '<a>Test button</a>';
}
Код находится в файле function.php вашей дочерней темы (или в плагине). Протестировано и работает как с включенным HPOS, так и без него.
Сопутствующая документация: Книга рецептов обновления высокопроизводительного хранилища заказов
Связанный:
Вы также делаете что-то вроде этого:
$current_screen = get_current_screen()->id;
if ($current_screen=='shop_order' || $current_screen=='woocommerce_page_wc-orders') {
add_meta_box(
'mymeta-box',
'My Box Title',
'mymeta_callback',
$current_screen,
'side',
'low'
);
}
Замените в коде «shop_order» на «wc_order». Это особый тип сообщений, используемый WooCommerce для заказов.