/**
* Shortcode: [pgp_wc_grid]
* Nutzt folgende Custom Fields der aktuellen Seite:
* - product_categories_cat_slug (z. B. "anal-gleitmittel")
* - product_categories_cat_taxonomy (z. B. "product_cat")
* - color_color_slug (z. B. "blau")
* - color_color_taxonomy (z. B. "pa_farbe")
*
* Optional-Parameter (überschreiben Meta):
* [pgp_wc_grid cat_slug="anal-gleitmittel" cat_tax="product_cat" color_slug="blau" color_tax="pa_farbe" per_page="24" columns="4" orderby="menu_order" order="ASC" paginate="true" ep="true"]
*/
add_shortcode('pgp_wc_grid', function($atts){
if ( ! function_exists('wc_get_template_part') ) return '';
$post_id = get_queried_object_id();
// Defaults aus Meta (deiner generierten Seite) lesen
$meta = [
'cat_slug' => get_post_meta($post_id, 'product_categories_cat_slug', true),
'cat_tax' => get_post_meta($post_id, 'product_categories_cat_taxonomy', true),
'color_slug' => get_post_meta($post_id, 'color_color_slug', true),
'color_tax' => get_post_meta($post_id, 'color_color_taxonomy', true),
];
// Shortcode-Attribute erlauben Override
$a = shortcode_atts([
'cat_slug' => $meta['cat_slug'],
'cat_tax' => $meta['cat_tax'],
'color_slug' => $meta['color_slug'],
'color_tax' => $meta['color_tax'],
'per_page' => 24,
'columns' => 4,
'orderby' => 'menu_order', // 'date','title','popularity','rating','price','price-desc' etc.
'order' => 'ASC',
'paginate' => 'true',
'ep' => 'false', // ElasticPress Integration
], $atts, 'pgp_wc_grid');
$tax_query = ['relation' => 'AND'];
// Kategorie filtern, falls vorhanden
if ( ! empty($a['cat_slug']) && ! empty($a['cat_tax']) ) {
$tax_query[] = [
'taxonomy' => sanitize_key($a['cat_tax']),
'field' => 'slug',
'terms' => array_map('trim', explode(',', $a['cat_slug'])),
'operator' => 'IN',
];
}
// Farbe (Attribut) filtern, falls vorhanden
if ( ! empty($a['color_slug']) && ! empty($a['color_tax']) ) {
$tax_query[] = [
'taxonomy' => sanitize_key($a['color_tax']),
'field' => 'slug',
'terms' => array_map('trim', explode(',', $a['color_slug'])),
'operator' => 'IN',
];
}
// Pagination wie Woo-Seiten
$paged = max(1, get_query_var('paged') ?: get_query_var('page') ?: 1);
$query_args = [
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => true,
'orderby' => $a['orderby'],
'order' => $a['order'],
'posts_per_page' => intval($a['per_page']),
'paged' => $paged,
'tax_query' => $tax_query,
// nur sichtbare Produkte:
'meta_query' => WC()->query->get_meta_query(),
];
// Elasticsearch/ElasticPress optional aktivieren
if ( filter_var($a['ep'], FILTER_VALIDATE_BOOLEAN) ) {
$query_args['ep_integrate'] = true;
}
$q = new WP_Query($query_args);
ob_start();
// Woo-typischer Loop-Header (Sortierung/Count etc., je nach Theme/Hooks)
do_action('woocommerce_before_shop_loop');
$columns = max(1, intval($a['columns']));
echo '
';
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
wc_get_template_part('content', 'product'); // nutzt dein Theme-Template -> identischer Look
}
} else {
echo '- ' . esc_html__('Keine passenden Produkte gefunden.', 'woocommerce') . '
';
}
echo '
';
if ( filter_var($a['paginate'], FILTER_VALIDATE_BOOLEAN) ) {
woocommerce_pagination([
'total' => $q->max_num_pages,
'current' => $paged,
]);
}
do_action('woocommerce_after_shop_loop');
wp_reset_postdata();
return ob_get_clean();
});
S Archive | Seite 22 Von 41 | Erotikwelt.org
You've just added this product to the cart:
WordPress Cookie Plugin von Real Cookie Banner