Weisen Sie eine Mindestanzahl an Ergebnissen für WooCommerce Query Shortcodes zu?

Ich verwende die integrierten Abfrage-functionscodes, um die zuletzt angezeigten Produkte eines Besuchers wie folgt anzeigen zu können:

 

Das Problem, das ich sehe, wenn Sie zum ersten Mal auf die Website kommen, haben Sie weniger als 4 Ergebnisse und Raster sieht nicht so toll aus. Ich würde viel lieber nur den ganzen Abschnitt verstecken.

Ich habe die Dokumentation überprüft und konnte mir keine Lösung vorstellen, bei der die gesamte Abfrage als PHP repliziert wurde. Hat jemand irgendwelche Ideen?

Solutions Collecting From Web of "Weisen Sie eine Mindestanzahl an Ergebnissen für WooCommerce Query Shortcodes zu?"

Ich glaube nicht, dass es einen Shortcode für kürzlich angesehene Produkte gibt, aber auch hier gibt es zwei Möglichkeiten. Eine besteht darin, das Widget mit einer einzigartigen Sidebar zu verwenden, die in einem Zustand verpackt ist, oder Sie können Ihre eigene function / Shortcode erstellen.

1. Bedingte Seitenleiste

Fügen Sie Ihrer Datei functions.php den folgenden Code hinzu. Dies aktiviert eine neue Sidebar (Widget-Bereich) und erstellt eine Hilfsfunktion für die spätere Verwendung.

functionen.php

 function register_custom_sidebar() { // Register new sidebar register_sidebar( array( 'name' => __( 'Custom Sidebar', 'stack-exchange' ), 'id' => 'custom-sidebar', 'description' => __( 'This sidebar is used only for recently view products.', 'stack-exchange' ), 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

', ) ); } add_action( 'widgets_init', 'register_custom_sidebar' ); function get_recently_viewed_products_count() { // Create helper function to check number of recently viewed products $viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array(); return count( $viewed_products ); }

Verwenden Sie in Ihrer Vorlage die neue function, um zu überprüfen, ob genügend kürzlich angezeigte Elemente vorhanden sind. Wenn ja, laden Sie die Sidebar und das Widget.

Sie müssen das Widget im Admin-Bereich hinzufügen, indem Sie zu Appearance > Widgets und nach dem Widget Zuletzt angezeigte Produkte suchen. Ziehen Sie diese in Ihre neu erstellte Seitenleiste (Beispiel: Benutzerdefinierte Seitenleiste).

Vorlagendatei

 < ?php // Use our function to check count of viewed products // If true (ie >= 4) load the sidebar/widget if ( get_recently_viewed_products_count() >= 4 ) { dynamic_sidebar( 'custom-sidebar' ); } ?> 

2. Benutzerdefinierter Shortcode

Erstellen Sie eine neue function in Ihrer Datei functions.php wie folgt. Dies ist mehr oder weniger eine Erweiterung von /woocommerce/includes/widgets/class-wc-widget-recently-viewed.php

functionen.php

 function recently_viewed_products_function( $atts ) { // Get viewed products $viewed_products = ! empty( $_COOKIE['woocommerce_recently_viewed'] ) ? (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ) : array(); // Reverse array (order of view) $viewed_products = array_reverse( array_filter( array_map( 'absint', $viewed_products ) ) ); // If there are no $viewed_products return; if ( empty( $viewed_products ) ) { return; } // Get limit, if not found set to 4 ( isset( $atts['limit'] ) ? $limit = $atts['limit'] : $limit = 4 ); // If number of $viewed_products is greater than or equal to $limit carry on if ( count( $viewed_products ) >= $limit ) { ob_start(); // Set query args using $limit and $viewed_products $query_args = array( 'posts_per_page' => $limit, 'no_found_rows' => 1, 'post_status' => 'publish', 'post_type' => 'product', 'post__in' => $viewed_products, 'orderby' => 'post__in', ); $query = new WP_Query( $query_args ); if ( $query->have_posts() ) : echo '
    '; while ( $query->have_posts() ) : $query->the_post(); // Output product content // I've used the default as standard but you can do anything here wc_get_template_part( 'content', 'product' ); endwhile; echo '
'; endif; wp_reset_postdata(); $content = ob_get_clean(); echo $content; } else { return; } } add_shortcode( 'recently_viewed_products', 'recently_viewed_products_function' ); // This function is required to set the cookie for recently viewed products // Thanks for @louis-w for the heads-up (https://github.com/woocommerce/woocommerce/issues/9724#issuecomment-160618200) function custom_track_product_view() { if ( ! is_singular( 'product' ) ) { return; } global $post; if ( empty( $_COOKIE['woocommerce_recently_viewed'] ) ) $viewed_products = array(); else $viewed_products = (array) explode( '|', $_COOKIE['woocommerce_recently_viewed'] ); if ( ! in_array( $post->ID, $viewed_products ) ) { $viewed_products[] = $post->ID; } if ( sizeof( $viewed_products ) > 15 ) { array_shift( $viewed_products ); } // Store for session only wc_setcookie( 'woocommerce_recently_viewed', implode( '|', $viewed_products ) ); } add_action( 'template_redirect', 'custom_track_product_view', 20 );

Echo den Shortcode in deiner Vorlage und du bist gut zu.

Vorlagendatei

 < ?= do_shortcode( '[recently_viewed_products limit="2"]' ); ?>