Mensajes de salida relacionados con las etiquetas.

4 minutos de lectura

estoy usando WordPress 3.9 y WooCommerce 2.1.8y queriendo saber cómo puedo mostrar una sola fila de cuatro publicaciones relacionadas que el usuario está viendo actualmente, que es relativa a la etiqueta o etiquetas del puesto, en lugar del categoría Está dentro.

Idealmente, me gustaría mostrar cuatro productos relacionados con el etiquetas del artículo que se está viendo actualmente en la parte inferior de mis páginas de productos individuales, específicamente, cada una de las imágenes o miniaturas destacadas de la publicación relacionada, y los precios. Si es posible, una solución también escrita desde el funciones.php expediente.

El siguiente código es lo que tengo hasta ahora, que muestra el categorías del puesto, en lugar del etiquetas está basado en:

    add_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);

    function woocommerce_output_related_products() {
        $output = null;

        ob_start();

        woocommerce_related_products(array(
            'columns' => 4, 
            'posts_per_page' => 4,
            'post_type' => 'product',
            'fields' => 'ids',
            'meta_query' => $meta_query,
            'tax_query' => array(
               'relation' =>  'AND',
                 array(
                    'taxonomy' => 'product_cat',
                    'field' => 'id',
                    'terms' => $cats_array
                ), 
                array(
                    'taxonomy' => 'product_tag',
                    'field' => 'id',
                    'terms' => $tags_array
                )
            )
        )); 

        $content = ob_get_clean();
        if($content) { $output .= $content; }

        echo '<div class="clear"></div>' . $output;

    } 

Cualquier ayuda sería muy apreciada,
Gracias.

avatar de usuario
Danijel

Hay otro filtro, woocommerce_related_products_args en /templates/single-product/related.php archivo de plantilla, que anula su matriz de consulta.

Una posible solución es anular related.php plantilla, cree una nueva plantilla y ejecute WP_Query allí, luego incluya esa plantilla con wc_get_template() función.

La otra es aprovechar los filtros incorporados (existe un buen número de ellos). Trataré de explicar que filtros aquí, cuál es su propósito y cómo usarlos, en el orden de su ejecución.


woocommerce_output_related_products_args

El primer filtro para configurar el woocommerce_related_products() argumentos de la función. La función carga related.php la plantilla y los argumentos pasados ​​son las opciones globales para la plantilla. Los argumentos son "posts_per_page", "columns" y "orderby".

/* An example of how to set the four products per page */
add_filter( 'woocommerce_output_related_products_args', function( $args ) 
{ 
    $args = wp_parse_args( array( 'posts_per_page' => 4 ), $args );
    return $args;
});

Al principio de la plantilla el WooCommerce $product objeto busca los productos relacionados por categoría y etiqueta. El resultado es una matriz de ID de publicación que luego se usa para el post__in cláusula en la consulta principal. Hay algunos filtros disponibles.

woocommerce_product_related_posts_relate_by_category

Se utiliza para excluir los productos relacionados por categoría.

add_filter( 'woocommerce_product_related_posts_relate_by_category', function() {
    return false;
});

woocommerce_product_related_posts_relate_by_tag

Excluye los productos relacionados por etiqueta.

add_filter( 'woocommerce_product_related_posts_relate_by_tag', function() {
    return false;
});

woocommerce_product_related_posts_query

Para hacer una modificación final de las partes de la consulta.

add_filter( 'woocommerce_product_related_posts_query', function( $query ) {
    // modify $query array
    return $query;
});

El último filtro que brinda la posibilidad de modificar los parámetros para la consulta principal es woocommerce_related_products_args.

woocommerce_related_products_args

Desde ahora la consulta se basa en post__in cláusula, elimine esa parte y agregue sus partes de consulta personalizadas.

add_filter( 'woocommerce_related_products_args', function( $args ) 
{
    unset( $args['post__in'] );
    $args['tax_query'] = array( /* taxonomy parameters */ );
    return $args;
});

Un ejemplo de cómo mostrar cuatro productos relacionados con las etiquetas.

add_filter( 'woocommerce_output_related_products_args', function( $args ) 
{ 
    $args = wp_parse_args( array( 'posts_per_page' => 4 ), $args );
    return $args;
});

add_filter( 'woocommerce_product_related_posts_relate_by_category', function() {
    return false;
});

Algunos consejos que pueden ser útiles:

En cada enlace de filtro, si no está seguro de cuáles son los argumentos predeterminados que se pasan, use print_r en ellos para ver los valores en el navegador. Además, una mirada a los archivos fuente de WooCommerce aclarará algunas cosas. Y finalmente, muchas veces no es necesario anular por completo las funciones predeterminadas de WooCommerce, ya que los creadores del complemento realmente se esforzaron con todos esos filtros para facilitar las cosas.

  • Reescribí la respuesta lo mejor que pude, así que espero que ahora las cosas estén más claras.

    – Daniel

    27 mayo 2014 a las 15:28


  • Tenga en cuenta que el woocommerce_related_products_args el gancho del filtro ya no existe.

    – Philipp Bammes

    25 de febrero de 2020 a las 10:08


¿Ha sido útil esta solución?