Allgemeine Hinweise
In eurem Onlineshop werden standardmäßig alle Produkte aufgelistet, die angelegt wurden. In eurem e-Commerce Projekt kann es jedoch manchmal gewünscht sein, dass bestimmte Produkte gar nicht in euren Shop oder nicht überall in eurem Shop erscheinen. Die nachfolgenden Snippets für WooComerce helfen euch dabei, genau das zu erreichen.
Produkte mit bestimmten Produktkategorien ausblenden
Das folgende Snippet bewirkt, dass alle Produkte, die die Produktkategorie „Kategorie1“ oder „Kategorie2“ hinterlegt haben, nicht im Shop gelistet werden. Dies gilt für den gesamten Shop inkl. aller Unterseiten!
// Produkte mit bestimmten Produktkategorien auf gesamten Shop ausschließen
// Quelle: https://docs.woocommerce.com/document/exclude-a-category-from-the-shop-page/#
function webonauten_custom_pre_get_posts_query_cat( $q ) {
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'kategorie1', 'kategorie2' ),
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
add_action( 'woocommerce_product_query', 'webonauten_custom_pre_get_posts_query_cat' );
Produkte mit bestimmten Produktschlagwörtern ausblenden
Das folgende Snippet bewirkt, dass alle Produkte, die die Produktschlagwörter „Schlagwort1“ oder „Schlagwort2“ hinterlegt haben, nicht im Shop gelistet werden. Dies gilt für den gesamten Shop inkl. aller Unterseiten!
//Produkte mit bestimmten Produktschlagwörtern auf gesamten Shop ausschließen
// Quelle: https://wordpress.stackexchange.com/questions/278390/how-to-exclude-products-by-tag-from-woocommerce-shop-page
function webonauten_custom_pre_get_posts_query_tag( $q ) {
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_tag',
'field' => 'slug',
'terms' => array( 'schlagwort1', 'schlagwort2' ),
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
add_action( 'woocommerce_product_query', 'webonauten_custom_pre_get_posts_query_tag' );
Produkte nur auf bestimmten Seiten ausblenden
Die oben aufgeführten Snippets führen dazu, dass Produkte mit bestimmten Produktkategorien oder Produkte mit bestimmten Produktschlagwörtern nirgends in eurem Onlineshop mehr gelistet werden. Dies ist natürlich nicht immer sinnvoll. Manchmal ist es gewünscht, dass die Produkte nur auf bestimmten Seiten eures WooCommerce-Shops nicht dargestellt werden. Um dies zu erreichen müssen die Snippets einfach um eine Bedingung erweitert werden. Das nachfolgende WooCommerce Snippet bewirkt beispielsweise, dass alle Produkte mit den Produktkategorien „Kategorie1“ oder „Kategorie2“ nicht auf der „Shop“-Seite gelistet werden, wohl aber auf Unterseiten wie etwa den Produktkategorie-oder Schlagwort-Seiten.
// Produkte mit bestimmten Produktkategorien nur auf bestimmten Seiten ausschließen
// Quelle https://wpbeaches.com/hide-woocommerce-product-categories-shop-page/
function webonauten_custom_pre_get_posts_query_cat( $q ) {
if( is_shop() || is_page('awards') ) { // set conditions here
$tax_query = (array) $q->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'kategorie1', 'kategorie2' ),,
'operator' => 'NOT IN'
);
$q->set( 'tax_query', $tax_query );
}
}
add_action( 'woocommerce_product_query', 'webonauten_custom_pre_get_posts_query_cat' );