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

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

HIT

17.02.2019

2904

1

Отключая стандартные метабоксы, мы фактически избавляемся изначально от лишнего функционала. При отключении метабоксов мы также отключаем сами поля, что позволяет существенно разгрузить таблицу 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'));
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Фильтр по наличию

Фильтр по наличию

Оказывается в последних версиях Woocommerce есть встроенная функция фильтрации по наличию. Через добавление в url параметра filter_stock_status. Можно её использовать для создания фильтра: Функция вывода списка: Функция с условиями вывода Читать далее »

Woocommerce и валюта

Woocommerce и валюта

Разбираем различные решения по работе с валютами (не мультивалютность, это отдельная тема). Курс в другой валюте Если мы торгуем на сайте в рублях, но нам нужно чтобы рядом с каждой Читать далее »

Атрибуты товара WC

Атрибуты товара WC

В интернет-магазине Woocommerce есть функционал атрибутов. Атрибуты товара — это дополнительные поля для различных значений. Атрибуты бывают 2-х типов: текстовый (text) и с выбором значения (select). Архив значения атрибута Для Читать далее »

/

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

Notice: Функция WP_Styles::add вызвана неправильно. Стиль с дескриптором "editor-buttons" был поставлен в очередь с незарегистрированными зависимостями: dashicons. Дополнительную информацию можно найти на странице «Отладка в WordPress». (Это сообщение было добавлено в версии 6.9.1.) in /home/t/tiberi6w/opttour.ru/public_html/wp-includes/functions.php on line 6260

1 комментарий

  1. Павел

    Спасибо за отличную статью! Не подскажете — почему у меня код «Функции отчистки метаполей БД при деавторизации» отображается кодом над шапкой сайта? 🙁 При этом на втором сайте всё заработало, база очищается при деавторизации.

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