/ Сайтостроение / Wordpress / Отключаем стандартные метабоксы

Отключаем стандартные метабоксы

17.02.2019

128

Отключая стандартные метабоксы, мы фактически избавляемся изначально от лишнего функционала. При отключении метабоксов мы также отключаем сами поля, что позволяет существенно разгрузить таблицу wp_postmeta (особенно если у сайта несколько тысяч записей). Особенно актуально это для магазинов WC, т.к. у каждого товара до 30 метаполей, половина из которых обычно не используются.

Вычитал в одном из чатов ответ разработчика Woocommerce. Он объясняет что сохранение пустых значений предусмотренно специально, т.к. само поле может запрашиваться во многих других функциях WC. Странно, почему они не могут запрашивать предварительную проверку существует ли данное значение, а не создавать десятки тысяч пустых метаполей.

SQL запрос на получение списка всех ключей в таблице wp_postmeta:

SELECT DISTINCT meta_key FROM `wp_postmeta`

Отключаем метабоксы WordPress

function remove_my_metaboxes() {
	remove_meta_box( 'categorydiv','post','normal' );       // Categories Metabox 
	remove_meta_box( 'submitdiv','post','normal' );         // Categories Metabox 
	remove_meta_box( 'postcustom','page','normal' );        // Custom Fields Metabox 
	remove_meta_box( 'postcustom','post','normal' );        // Custom Fields Metabox 
	remove_meta_box( 'commentstatusdiv','page','normal' );  // Comments Metabox 
	remove_meta_box( 'commentsdiv','post','normal' );       // Comments Metabox 
	remove_meta_box( 'trackbacksdiv','page','normal' );     // Talkback Metabox 
	remove_meta_box( 'trackbacksdiv','post','normal' );     // Trackback Metabox
	remove_meta_box( 'authordiv','page','normal' );         // Author Metabox 
	remove_meta_box( 'authordiv','post','normal' );         // Author Metabox 
	remove_meta_box( 'postexcerpt','post','normal' );       // Excerpt Metabox 
	remove_meta_box( 'postexcerpt','page','normal' );       // Excerpt Metabox 
	remove_meta_box( 'revisionsdiv','post','normal' );      // Revisions Metabox 
	remove_meta_box( 'slugdiv','page','normal' );           // Slug Metabox 
	remove_meta_box( 'slugdiv','post','normal' );           // Slug Metabox 
	remove_meta_box( 'formatdiv','post','normal' );         // Formats Metabox 
	remove_meta_box( 'postimagediv','post','normal' );      // Featured Image Metabox 
	remove_meta_box( 'tagsdiv-post_tag','post','normal' );  // Tags Metabox
	remove_meta_box( 'commentstatusdiv','post','normal' );  // Comments Status Metabox
}
add_action('admin_menu','remove_my_metaboxes');

Отключаем метабоксы Woocommerce

Идентификатор метабокса можно так, находим в коде нужный нам div с классом postbox. Его id и будет идентификатором этого метабокса.

add_action( 'add_meta_boxes' , 'remove_my_meta_boxes', 40 );
function remove_my_meta_boxes() {
    //remove_meta_box( 'woocommerce-product-images', 'product', 'side'); // Отключить блок доп. изображения
	//remove_meta_box( 'tagsdiv-product_tag', 'product', 'side' ); // Отключить блок метки товара
	//remove_meta_box( 'postexcerpt' , 'product' , 'normal' ); // Отключить блок краткое описание
    //remove_meta_box( 'commentsdiv' , 'product' , 'normal' ); // Отключить блок обзоры
	
	//remove_meta_box( 'woocommerce-product-data' , 'product' , 'normal' ); // !Отключить блок данные товара
}

Последняя строка отключает весь товарный бокс woocommerce. Функция для того чтобы оключить какую-либо вкладку из бокса WC:

function remove_linked_products($tabs){
	unset($tabs['general']);
	unset($tabs['inventory']);
	unset($tabs['shipping']);
	unset($tabs['linked_product']);
	unset($tabs['attribute']);
	unset($tabs['advanced']);
	
	return($tabs);
}

add_filter('woocommerce_product_data_tabs', 'remove_linked_products', 10, 1);

Но отключение вкладки полей не отклюючает сохранения этих полей с пустыми значениями.

Отключение некоторых полей функциями:

add_filter( 'wc_product_sku_enabled', '__return_false' ); // Отключить SKU
add_filter( 'wc_product_weight_enabled', '__return_false' ); // Отключить Вес
add_filter( 'wc_product_dimensions_enabled', '__return_false' ); // Отключить ШхВхГ

Но даже при отключении полей, пустые метаполя все равно создаются.

Очистка лишних meta_key

Остается только отчищать лишние поля через БД, но при обновлении товаров они снова будут появлятся. Сценарий запроса SQL на удаление полей WC:

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

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_weight';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_length';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_width';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_height';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_wc_average_rating';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_wc_rating_count';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_product_version';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_stock';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_stock_status';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_backorders';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_manage_stock';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_sold_individually';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_sale_price_dates_to';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_sale_price_dates_from';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_purchase_note';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_tax_class';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_wc_review_count';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_upsell_ids';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_crosssell_ids';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_download_limit';
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_download_expiry';

DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_edit_last'
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_edit_lock'
DELETE FROM `wp_postmeta` WHERE meta_key LIKE '_wp_old_slug'

Удаление бесполезных полей (про которые мы точно знаем что на данном сайте не используются) можно автоматизировать функцией выхода из системы:

// Функция отчистки метаполей БД при деавторизации
function delete_useless_post_meta() {
   global $wpdb;
   $table = $wpdb->prefix.'postmeta';
   $wpdb->delete ($table, array('meta_key' => '_length'));
   $wpdb->delete ($table, array('meta_key' => '_width'));
   $wpdb->delete ($table, array('meta_key' => '_height'));
}
add_action('wp_logout','delete_useless_post_meta');

Рекомендуют также и эти таблицы чистить:

$wpdb->delete ($table, array('meta_key' => '_edit_last'));
$wpdb->delete ($table, array('meta_key' => '_edit_lock'));
$wpdb->delete ($table, array('meta_key' => '_wp_old_slug'));

Тэги:

Поделится информацией с друзьями

  • Похожие записи
  • Комментарии
  • Вложения
Разбираем woocommerce на молекулы

Разбираем woocommerce на молекулы

В данном материале разбираем некоторые хуки woocommerce, их последовательность, а также в структуру шаблонов WC и их проверку. Добавляем стандартные хлебные крошки WC <?php woocommerce_breadcrumb(); ?> Файлы шаблона: archive-product.php — Читать далее »

Субкатегории в категориях Woocommerce

Субкатегории в категориях Woocommerce

В шаблоне вывода категорий Woocommerce к каждой категории можно выводить список субкатегорий. Для этого в шаблоне content-product_cat.php, перед закрывающим тегом /li вставляем следующее <div class="podrazdely"> <?php $wsubargs = array( 'hierarchical' Читать далее »

Шорткоды woocommerce

Шорткоды woocommerce

Для вывода (например) на главной странице сайта элементов WC. Последние продукты Полезно для использования на главной странице. Определяет, сколько товаров показывать на странице и количество сколько столбцов. Код: array( 'post_type' Читать далее »

/

Добавить комментарий

Пока нет комментариев. Будь первым!

Отключаем стандартные метабоксы
Символы HTML
Рекомендации для васСимволы HTMLOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.