Как удалить мета-поля со страниц редактирования заказа WooCommerce, когда HPOS включен

Как удалить мета-поля определенных заказов со страниц редактирования заказов.

Следующие действия работают с устаревшими заказами, но не с высокопроизводительным хранилищем заказов (HPOS):

remove_meta_box( 'woocommerce-order-items', 'shop-order', 'normal' ); // Removes products/items meta box for technicians
remove_meta_box( 'woocommerce-order-actions', 'shop-order', 'normal' ); // Removes products/items meta box for technicians
remove_meta_box( 'woocommerce-order-notes', 'shop-order', 'normal' ); // Removes order note meta box for technicians
remove_meta_box( 'order_custom', 'shop-order', 'normal' );

Обновлено:

Я попробовал следующее:

function itsm_add_meta_boxes() {
    echo '<style>
    #woocommerce-order-items, #woocommerce-order-actions, #wpo_wcpdf-data-input-box, #woocommerce-order-notes, #order_custom { 
        display: none !important; 
    }
    </style>';
}
add_action( 'add_meta_boxes', 'itsm_add_meta_boxes', 11 );

Он просто скрывает их, но на самом деле не удаляет.

Есть еще предложения?

🤔 А знаете ли вы, что...
PHP широко используется для разработки систем управления контентом, таких как WordPress и Joomla.


1
52
1

Ответ:

Решено

Для удаления метабоксов высокопроизводительного хранилища заказов (также совместимых с устаревшими заказами) вам нужно использовать что-то немного другое, поскольку второй аргумент «shop-order» работает только для устаревших заказов.

Обратите внимание, что по умолчанию в WooCommerce действия заказа и примечания к заказу третий аргумент — «сторона» (но не «обычный»).

Попробуйте следующее:

use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;

add_action( 'add_meta_boxes', 'admin_order_custom_metabox', 100 );
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';

    remove_meta_box( 'woocommerce-order-items', $screen, 'normal' ); // Removes Order items meta box
    remove_meta_box( 'woocommerce-order-actions', $screen, 'side' ); // Removes products/items meta box
    remove_meta_box( 'woocommerce-order-notes', $screen, 'side' ); // Removes order note meta box
    remove_meta_box( 'order_custom', $screen, 'normal' ); // Removes Custom fields meta box
}

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

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