En primer lugar , no puede lograr de inmediato el objetivo que describió con el código que muestra en su pregunta. Para entender por qué no hay un enfoque directo con ese código, debe echar un vistazo a lo que está utilizando woocommerce_related_products()
, para hacer lo que ha hecho hasta ahora.
En segundo lugar , debe comprenderlo, porque de lo contrario no podrá hacer una pregunta puntual, que debería ser su objetivo, para asegurarse de obtener una respuesta. Además de eso hay que tener en cuenta que el desarrollo de Wordpress tiene su conjunto alcance primaria en cuestiones relacionados con el núcleo de WordPress - Si usted está interesado, esto está bajo discusión sobre Wordpress Desarrollo del Meta , un tema específico siendo Nuestros wooes y futuro de los plugins de plataforma en WPSE . Entonces, si está haciendo preguntas sobre complementos, como woocommerce, debe desglosarlo para que esté lo más relacionado posible con las funciones principales, vea el siguiente punto, ya que no puede esperar que las personas conozcan todos los detalles de cada complemento que Estás usando.
En tercer lugar , ahora profundicemos en lo que está sucediendo. Como dijiste, estás usando woocommerce_related_products()
ahora. Si observa la fuente, verá que esta función la utiliza woocommerce_get_template()
para obtener la related.php
plantilla. woocommerce_get_template()
nuevamente utiliza woocommerce_locate_template()
para localizar la plantilla, este último lo hace haciendo uso de la función central de wordpress locate_template()
.
Ahora hay una conexión de regreso al núcleo, lo que lleva a la comprensión de que las funciones mencionadas anteriormente, y con suerte inspeccionadas, son esencialmente envoltorios para extender la funcionalidad del núcleo. Otra cosa que quedó clara al analizar las dependencias de la funcionalidad es que, lo que dije antes, necesita un enfoque diferente para lograr su objetivo, porque woocommerce_related_products()
, ahora innegablemente obvio, no es el correcto.
Si me siguió con mis explicaciones y ha leído detenidamente hasta ahora, se dio cuenta de que related.php
contiene lo que está buscando. Estoy especialmente hablando de la get_related()
función, que incluye el woocommerce_product_related_posts
gancho y hace uso de las funciones básicas wp_get_post_terms()
y get_posts()
- get_related()
Se usa para obtener un conjunto de identificadores. Además, existe el woocommerce_related_products_args
gancho, que se puede usar para alterar los argumentos de la consulta de productos relacionados dentro related.php
, WP_Query
se usa para esto. La consulta utiliza los identificadores resultantes de la get_related()
llamada.
Creo que ahora tienes todo a mano para resolver tu problema. En realidad, mucho más que eso, ofrece una descripción casi completa sobre cómo personalizar los productos relacionados. No mencioné todas las funcionalidades (funciones y / o conexiones) del código fuente inspeccionado, pero definitivamente todas las importantes. Ahora debería estar más claro cómo se puede rastrear la funcionalidad de los productos relacionados de WooCommerce hasta las funciones principales de WordPress.
En cuarto lugar , vengo, donde debes aplicar tus personalizaciones y lo que deberías haber pedido. Por ejemplo así:
Woocommerce tiene el woocommerce_product_related_posts
gancho de personalizar la get_posts()
llamada para determinar productos relacionados.
Código:
// Get the posts
$related_posts = get_posts( apply_filters('woocommerce_product_related_posts', array(
'orderby' => 'rand',
'posts_per_page' => $limit,
'post_type' => 'product',
'fields' => 'ids',
'meta_query' => $meta_query,
'tax_query' => array(
'relation' => 'OR',
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $cats_array
),
array(
'taxonomy' => 'product_tag',
'field' => 'id',
'terms' => $tags_array
)
)
) ) );
¿Cómo puedo personalizar esto para lograr mi objetivo? Que es mostrar productos relacionados que están en la misma categoría de producto product_cat
- y tienen la misma etiqueta (s) product_tag
- que el producto individual que se muestra.
Sin darle una conclusión, al menos no si esperaba obtener un código completo y listo, la respuesta, lo primero que probablemente debería hacer es cambiar el tax_query
parámetro relation
de OR
a AND
.
Notas:
- Hice de esta una respuesta descriptiva más larga con la discusión en curso vinculada anteriormente en mente
- Espero que no te importe, que no solo es una respuesta a tu pregunta, sino que además busca cumplir un propósito educativo general
- esto no se ha probado , porque no existe un código real
- Por último, pero no menos importante, es previsible que con el lanzamiento de Woocoomerce 2.1 se implementarán algunos cambios significativos en el código, teniendo esto en cuenta, pero por ahora a partir de 2.0.19, el código anterior es válido
Editar:
Realmente no deberías editar las clases principales (plugin) directamente. Es problemático, porque debe mantener sus cambios en las actualizaciones nuevamente, ya que los archivos principales se actualizan y se sobrescriben si realiza uno. Especialmente si es fácilmente evitable como en este caso, el siguiente código hace lo que pretendía hacer de todos modos, es decir, implementar este cambio a través de su functions.php
.
Código:
add_filter( 'woocommerce_product_related_posts',
'wpse_123436_change_wc_related_products_relation_to_and' );
function wpse_123436_change_wc_related_products_relation_to_and() {
$get_related_products_args = array(
'orderby' => 'rand',
'posts_per_page' => $limit,
'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
)
)
);
return $get_related_products_args;
}
Para WooCommerce versión 2.1.0 y superiores, el gancho anterior no funcionará, ya que ya no existe, por lo que la respuesta se puede usar hasta la versión 2.0.20. Pero @NathanPowell descubrió una buena respuesta en StackOverflow con respecto a la versión v2.1.0 disponible y para la personalización del conjunto de ganchos utilizables de los productos relacionados .
OR
aAND
en miwp-content/plugins/woocommerce/classes/abstract/abstract-wc-product.php
archivo y pronto cambiaré esto para que se haga desde dentro delfunctions.php
archivo. Gracias de nuevo.