WooCommerce: фільтр адміністратара для пошуку прадуктаў без набору выяваў прадукту

Мы дапамагаем кліенту, які мае сайт WordPress WooCommerce, які на працягу многіх гадоў губляў бачнасць у пошукавай сістэме з-за сотняў праблем з кодам, канфігурацыяй і змесцівам, звязаных з гадамі грэбавання, усталяванымі і выдаленымі плагінамі і дзесяткамі тэм.
З запускам новага сайта мы назіралі за працаздольнасцю сайта і нядаўна атрымалі наступнае паведамленне Google Search Console:

Мы былі здзіўлены тым, што ў WooCommerce у кампаніі былі прадукты, для якіх не было набору выяваў прадукту. Калі мы сканіравалі толькі што запушчаны сайт, мы не ўбачылі ніякіх праблем… гэта было таму, што новая тэма мела выяву-запаўняльнік, якая з'яўлялася кожны раз, калі выява не была ўстаноўлена. У выніку не было памылак для не знойдзеных малюнкаў.
Спіс прадуктаў WooCommerce
Нашым наступным крокам было вызначэнне прадуктаў на сайце, дзе не было набораў малюнкаў. Гэта няпростая задача, калі трэба фільтраваць сотні прадуктаў. У выніку мы напісалі наш уласны фільтр у прадуктах WooCommerce, каб адфільтраваць спіс да прадуктаў без набора выявы прадукту.

Цяпер мы можам лёгка праглядаць спіс і без асаблівых высілкаў абнаўляць выявы прадуктаў, калі гэта неабходна. Вось як мы гэта зрабілі.
Дадайце фільтр у спіс прадуктаў адміністратара WooCommerce
На старонцы даччынай тэмы кліента functions.php мы дадалі наступныя два раздзелы кода. Спачатку мы будуем поле фільтра:
// Add a filter on product for set product image
add_action('restrict_manage_posts', 'filter_products_by_image_presence');
function filter_products_by_image_presence() {
global $typenow;
$selected = isset($_GET['product_image_presence']) ? $_GET['product_image_presence'] : '';
if ('product' === $typenow) {
?>
<select name="product_image_presence" id="product_image_presence">
<option value="">Filter by product image</option>
<option value="set" <?php selected('set', $selected); ?>>Image Set</option>
<option value="notset" <?php selected('notset', $selected); ?>>Image Not Set</option>
</select>
<?php
}
} Вось пакрокавае тлумачэнне таго, што робіць кожная частка кода:
add_action('restrict_manage_posts', 'filter_products_by_image_presence');- Гэтая лінія падключаецца да
restrict_manage_posts, якое з'яўляецца дзеяннем, якое запускаецца ў вобласці адміністратара WordPress і дазваляе дадаваць дадатковыя параметры фільтрацыі ў спіс паведамленняў. Тут ён выкарыстоўваецца для дадання новага фільтра ў спіс прадуктаў WooCommerce.
- Гэтая лінія падключаецца да
function filter_products_by_image_presence() { ... }- Гэты блок вызначае функцыю
filter_products_by_image_presence, які выводзіць HTML для новага выпадальнага фільтра выбару на экране адміністратара прадукту.
- Гэты блок вызначае функцыю
global $typenow;- Глабальная зменная
$typenowвыкарыстоўваецца для праверкі тыпу бягучага спісу публікацый, каб пераканацца, што карыстальніцкі фільтр дадаецца толькі да экранаў тыпу публікацый «Прадукты», а не да іншых.
- Глабальная зменная
$selected = isset($_GET['product_image_presence']) ? $_GET['product_image_presence'] : '';- Гэты радок правярае, ці існуе актыўны набор фільтраў, шукаючы параметр 'product_image_presence' у URL-адрасе, які перадаецца як запыт GET, калі вы выбіраеце опцыю фільтра і адпраўляеце фільтр. Ён захоўвае бягучы выбар, каб захаваць выбраны стан фільтра пасля перазагрузкі старонкі.
if ('product' === $typenow) { ... }- Гэты ўмоўны аператар правярае, ці з'яўляецца бягучы тып паведамлення прадуктам, гарантуючы, што код у аператары if працуе толькі для прадуктаў WooCommerce.
- Усё паміж
?>і<?phpгэта вывад HTML, у тым ліку выпадальнае меню выбару з параметрамі фільтрацыі па прадуктах з «Наборам выявы» або «Выява не ўстаноўлена». PHP перамяжоўваецца для апрацоўкі дынамічнага выбару празselected()функцыя, якая выводзіцьselectedатрыбут, калі бягучы$selectedзначэнне адпавядае значэнню опцыі. - ,en
selected()функцыя - гэта дапаможная функцыя WordPress, якая параўноўвае першы аргумент з другім і, калі яны супадаюць, выдае 'selected=”selected”', які з'яўляецца атрыбутам HTML, неабходным для паказу параметра як выбранага ў выпадальным спісе.
Гэты код фактычна дадае выпадальны фільтр у спіс прадуктаў, дазваляючы адміністратару адфільтраваць спіс па прадуктах, якія маюць набор малюнкаў ці не. Гэты дадатковы фільтр дапаможа карыстальнікам кіраваць вялікімі каталогамі, гарантуючы, што прадукты адпавядаюць патрабаванням спісаў крам, у тым ліку прызначэнне малюнкаў у рамках кантролю якасці спісаў.
Выканаць запыт у спісе прадуктаў адміністратара WooCommerce
Далей мы павінны дадаць запыт, які будзе выконваць і знаходзіць прадукты, для якіх не ўстаноўлена выява.
add_filter('parse_query', 'filter_products_query_by_image_presence');
function filter_products_query_by_image_presence($query) {
global $pagenow, $typenow;
if ('edit.php' === $pagenow && 'product' === $typenow && isset($_GET['product_image_presence']) && $_GET['product_image_presence'] != '') {
$presence = $_GET['product_image_presence'];
$meta_query = array(
'relation' => 'OR',
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS'
),
array(
'key' => '_thumbnail_id',
'value' => '0'
)
);
if ('set' === $presence) {
$meta_query = array(
array(
'key' => '_thumbnail_id',
'compare' => 'EXISTS'
),
array(
'key' => '_thumbnail_id',
'value' => array('', '0'), // Assuming '0' or '' could be placeholders for no image.
'compare' => 'NOT IN'
),
);
} elseif ('notset' === $presence) {
$meta_query = array(
'relation' => 'OR',
array(
'key' => '_thumbnail_id',
'compare' => 'NOT EXISTS'
),
array(
'key' => '_thumbnail_id',
'value' => '0'
)
);
}
$query->set('meta_query', $meta_query);
}
} Гэты фрагмент кода прызначаны для змены асноўнага запыту WordPress для спісаў прадуктаў у вобласці адміністратара, каб дазволіць фільтраваць прадукты на аснове таго, ці ёсць у іх звязаны відарыс. Вось тлумачэнне яго кампанентаў:
add_filter('parse_query', 'filter_products_query_by_image_presence');- Гэтая лінія далучае
filter_products_query_by_image_presenceфункцыі да стparse_queryхук фільтра, які выкарыстоўваецца для карэкціроўкі асноўнага запыту, які WordPress выкарыстоўвае для атрымання паведамленняў (або карыстацкіх тыпаў паведамленняў, такіх як прадукты) у табліцы спісу адміністратара.
- Гэтая лінія далучае
function filter_products_query_by_image_presence($query) { ... }- Гэтая функцыя вызначана для змены запыту спісу прадуктаў на аснове наяўнасці малюнкаў прадукту. The
$queryзменная з'яўляецца асобнікамWP_Queryклас, перададзены па спасылцы, што азначае, што любыя змены гэтага аб'екта будуць уплываць на фактычны выкананне запыту WordPress.
- Гэтая функцыя вызначана для змены запыту спісу прадуктаў на аснове наяўнасці малюнкаў прадукту. The
global $pagenow, $typenow;- Гэтыя глабальныя зменныя з'яўляюцца зменнымі асяроддзя WordPress.
$pagenowвыкарыстоўваецца для праверкі бягучай старонкі адміністратара і$typenowкаб праверыць тып бягучага паведамлення. - Умоўны аператар правярае, ці з'яўляецца бягучая старонка «edit.php» (старонка па змаўчанні для пераліку паведамленняў і карыстальніцкіх тыпаў паведамленняў), тып паведамлення - «прадукт» (што азначае, што мы знаходзімся ў спісе прадуктаў WooCommerce), і калі фільтр усталяваны праз a
GETпараметр з назвай 'product_image_presence'.
- Гэтыя глабальныя зменныя з'яўляюцца зменнымі асяроддзя WordPress.
- Новы масіў метазапытаў ствараецца на аснове значэння 'product_image_presence'. Гэты масіў прызначаны для стварэння ўмоў для фільтрацыі прадуктаў з малюнкамі або без іх.
- ,en
relationключ, усталяваны ў «АБО», паказвае, што любое з умоў унутры можа быць праўдзівым для метазапыту для атрымання прадуктаў. - Калі для фільтра ўстаноўлена «ўсталяваць», новы
$meta_queryствораны для пошуку прадуктаў з выявамі. Уключаны прадукты, якія маюць '_thumbnail_id' (што азначае, што выява ўстаноўлена), а не пусты радок або '0'. - Калі для фільтра ўстаноўлена "notset", мета-запыт шукае прадукты, у якіх мета-ключ "_thumbnail_id" альбо не існуе, альбо ўсталяваны ў "0", што будзе азначаць, што з прадуктам няма выявы.
- ,en
$query->set('meta_query', $meta_query);- Гэты радок змяняе асноўны запыт, усталяваўшы 'meta_query' з умовамі, вызначанымі ў
$meta_query.
- Гэты радок змяняе асноўны запыт, усталяваўшы 'meta_query' з умовамі, вызначанымі ў
Гэтая налада дапамагае адміністратару крамы WooCommerce хутка знаходзіць прадукты без малюнкаў, што вельмі важна для кіравання запасамі, маркетынгу і стратэгіі продажаў, паколькі прадукты з выявамі з большай верагоднасцю прадаюцца і прадастаўляюць кліентам неабходную візуальную інфармацыю. Забяспечваючы камплектаванне спісаў прадуктаў выявамі, продажы і маркетынгавыя намаганні могуць быць больш эфектыўнымі.







