WooCommerce: Admin-Filter zum Finden von Produkten ohne Produktbildsatz

Wir helfen einem Kunden, der über eine WordPress-WooCommerce-Website verfügt, die aufgrund jahrelanger Vernachlässigung, installierter und deinstallierter Plugins und Dutzender Themes aufgrund Hunderter Code-, Konfigurations- und Inhaltsprobleme aufgrund jahrelanger Vernachlässigung an Suchmaschinensichtbarkeit verloren hat.
Beim Start der neuen Website haben wir die Leistung der Website beobachtet und kürzlich die folgende Google Search Console-Meldung erhalten:

Wir waren überrascht, dass das Unternehmen Produkte in WooCommerce gelistet hatte, für die kein Produktbild festgelegt war. Als wir die neu gestartete Website gecrawlt haben, konnten wir keine Probleme feststellen. Dies lag daran, dass das neue Theme über ein Platzhalterbild verfügte, das immer dann angezeigt wurde, wenn kein Bild festgelegt war. Infolgedessen gab es keine Fehler für nicht gefundene Bilder.
WooCommerce-Produktliste
Unser nächster Schritt bestand darin, die Produkte auf der Website zu identifizieren, für die keine Bilder eingestellt waren. Das ist keine leichte Aufgabe, wenn Hunderte von Produkten gefiltert werden müssen. Aus diesem Grund haben wir in WooCommerce-Produkten einen eigenen Filter geschrieben, um die Liste nach Produkten zu filtern, für die kein Produktbild festgelegt ist.

Jetzt können wir die Liste einfach durchsuchen und die Produktbilder bei Bedarf ohne Aufwand aktualisieren. So haben wir es gemacht.
Filter zur WooCommerce-Admin-Produktliste hinzufügen
Auf der Seite „functions.php“ des untergeordneten Themes des Kunden haben wir die folgenden zwei Codeabschnitte hinzugefügt. Zuerst bauen wir das Filterfeld auf:
// 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
}
} Hier finden Sie eine Schritt-für-Schritt-Erklärung der einzelnen Teile des Codes:
add_action('restrict_manage_posts', 'filter_products_by_image_presence');- Diese Linie hakt ein
restrict_manage_posts, eine Aktion, die im WordPress-Administrationsbereich ausgelöst wird und es Ihnen ermöglicht, zusätzliche Filteroptionen zur Beitragsliste hinzuzufügen. Hier wird es verwendet, um einen neuen Filter zur WooCommerce-Produktliste hinzuzufügen.
- Diese Linie hakt ein
function filter_products_by_image_presence() { ... }- Dieser Block definiert die Funktion
filter_products_by_image_presence, das HTML für einen neuen Dropdown-Auswahlfilter auf dem Produktadministrationsbildschirm ausgibt.
- Dieser Block definiert die Funktion
global $typenow;- Die globale Variable
$typenowwird verwendet, um den Typ der aktuellen Beitragsliste zu überprüfen, um sicherzustellen, dass der benutzerdefinierte Filter nur zu den Beitragstypbildschirmen „Produkte“ und nicht zu anderen hinzugefügt wird.
- Die globale Variable
$selected = isset($_GET['product_image_presence']) ? $_GET['product_image_presence'] : '';- Diese Zeile prüft, ob ein aktiver Filtersatz vorhanden ist, indem sie nach dem Parameter „product_image_presence“ in der URL sucht, der als GET-Anfrage übergeben wird, wenn Sie eine Filteroption auswählen und den Filter senden. Es speichert die aktuelle Auswahl, um den ausgewählten Status des Filters nach dem Neuladen der Seite beizubehalten.
if ('product' === $typenow) { ... }- Diese bedingte Anweisung prüft, ob der aktuelle Beitragstyp „Produkt“ ist, und stellt so sicher, dass der Code in der if-Anweisung nur für WooCommerce-Produkte ausgeführt wird.
- Alles dazwischen
?>kombiniert mit einem nachhaltigen Materialprofil.<?phpist eine HTML-Ausgabe, einschließlich der Auswahl-Dropdown-Liste mit Optionen zum Filtern nach Produkten mit „Bild eingestellt“ oder „Bild nicht eingestellt“. PHP ist eingestreut, um die dynamische Auswahl über zu handhabenselected()Funktion, die die ausgibtselectedAttribut, wenn das aktuelle$selectedDer Wert entspricht dem Optionswert. - Das
selected()Funktion ist eine WordPress-Hilfsfunktion, die das erste Argument mit dem zweiten vergleicht und bei Übereinstimmung „selected=“selected“ ausgibt, das HTML-Attribut, das benötigt wird, um eine Option als ausgewählt in einem Dropdown anzuzeigen.
Dieser Code fügt der Produktliste effektiv einen Dropdown-Filter hinzu, der es dem Administrator ermöglicht, die Liste nach Produkten zu filtern, für die ein Bildsatz vorhanden ist oder nicht. Dieser zusätzliche Filter würde Benutzern bei der Verwaltung großer Kataloge helfen und sicherstellen, dass die Produkte den Anforderungen des Store-Eintrags entsprechen, einschließlich der Zuweisung von Bildern als Teil der Qualitätskontrolle des Eintrags.
Führen Sie eine Abfrage für die WooCommerce-Admin-Produktliste aus
Als nächstes müssen wir eine Abfrage hinzufügen, die die Produkte ausführt und findet, für die kein Bildsatz vorhanden ist.
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);
}
} Dieses Code-Snippet dient zum Ändern der WordPress-Hauptabfrage für Produktlisten im Admin-Bereich, um das Filtern von Produkten basierend darauf zu ermöglichen, ob sie über ein zugehöriges Bild verfügen. Hier ist eine Erklärung seiner Komponenten:
add_filter('parse_query', 'filter_products_query_by_image_presence');- Diese Zeile hängt die an
filter_products_query_by_image_presenceFunktion für dieparse_queryFilter-Hook, der zum Anpassen der Hauptabfrage verwendet wird, die WordPress zum Abrufen von Beiträgen (oder benutzerdefinierten Beitragstypen wie Produkten) in der Admin-Listentabelle verwendet.
- Diese Zeile hängt die an
function filter_products_query_by_image_presence($query) { ... }- Diese Funktion ist so definiert, dass sie die Produktlistenabfrage basierend auf dem Vorhandensein von Produktbildern ändert. Der
$queryVariable ist eine Instanz vonWP_QueryKlasse, die als Referenz übergeben wird, was bedeutet, dass sich alle Änderungen an diesem Objekt auf die tatsächliche Abfrage auswirken, die WordPress ausführt.
- Diese Funktion ist so definiert, dass sie die Produktlistenabfrage basierend auf dem Vorhandensein von Produktbildern ändert. Der
global $pagenow, $typenow;- Diese globalen Variablen sind WordPress-Umgebungsvariablen.
$pagenowwird verwendet, um die aktuelle Admin-Seite zu überprüfen, und$typenowum den aktuellen Beitragstyp zu überprüfen. - Die bedingte Anweisung prüft, ob die aktuelle Seite „edit.php“ ist (die Standardseite zum Auflisten von Beiträgen und benutzerdefinierten Beitragstypen), der Beitragstyp „Produkt“ ist (was bedeutet, dass wir uns auf der WooCommerce-Produktliste befinden) und ob a Filter wurde durch a gesetzt
GETParameter mit dem Namen „product_image_presence“.
- Diese globalen Variablen sind WordPress-Umgebungsvariablen.
- Basierend auf dem Wert von „product_image_presence“ wird ein neues Metaabfrage-Array erstellt. Dieses Array soll die Voraussetzungen für die Filterung von Produkten mit oder ohne Bildern schaffen.
- Das
relationDer auf „OR“ gesetzte Schlüssel gibt an, dass jede der darin enthaltenen Bedingungen für die Metaabfrage zum Abrufen der Produkte wahr sein kann. - Wenn der Filter auf „set“ gesetzt ist, wird ein neuer
$meta_querywurde erstellt, um Produkte mit Bildern zu finden. Produkte, die eine „_thumbnail_id“ (was bedeutet, dass ein Bild festgelegt ist) und keine leere Zeichenfolge oder „0“ haben, sind enthalten. - Wenn der Filter auf „notset“ gesetzt ist, sucht die Metaabfrage nach Produkten, bei denen der Metaschlüssel „_thumbnail_id“ entweder nicht existiert oder auf „0“ gesetzt ist, was bedeuten würde, dass dem Produkt kein Bild zugeordnet ist.
- Das
$query->set('meta_query', $meta_query);- Diese Zeile ändert die Hauptabfrage, indem sie „meta_query“ mit den in definierten Bedingungen festlegt
$meta_query.
- Diese Zeile ändert die Hauptabfrage, indem sie „meta_query“ mit den in definierten Bedingungen festlegt
Diese Anpassung hilft einem WooCommerce-Shop-Administrator, Produkte ohne Bilder schnell zu finden, was für die Bestandsverwaltung, Marketing- und Vertriebsstrategien von entscheidender Bedeutung ist, da Produkte mit Bildern eher verkauft werden und Kunden die notwendigen visuellen Informationen liefern. Indem sichergestellt wird, dass Produktlisten vollständig mit Bildern versehen sind, können Vertriebs- und Marketingbemühungen effektiver sein.







