php - texto - woocommerce español
2 diseños para una tienda de WooCommerce (1)
Tengo categorías llamadas "Collectie" y "Shop", lo que quiero es diferentes diseños para los niños de ambas categorías.
Ya probé esto con la función template_include como esta:
function lab5_template_include( $template ) {
if ( category_has_children(''collectie'')) {
$template = get_stylesheet_directory() . ''/woocommerce/archive-product-collectie.php'';
}elseif ( is_product_category(''shop'')) {
$template = get_stylesheet_directory() . ''/woocommerce/archive-product-shop.php'';
}
return $template;
}
¿Cómo puedo hacer eso?
EDITAR
Lo resolví con la solución de https://wordpress.org/support/topic/different-page-layouts-for-category-vs-subcategory
Agregué las siguientes líneas a taxonomy-product_cat.php
// We need to get the top-level category so we know which template to load.
$get_cat = $wp_query->query[''product_cat''];
// Split
$all_the_cats = explode(''/'', $get_cat);
// How many categories are there?
$cat_count = count($all_the_cats);
//
// All the cats say meow!
//
// Define the parent
$parent_cat = $all_the_cats[0];
// Collectie
if ( $parent_cat == ''collectie'' ) woocommerce_get_template( ''archive-product-collectie.php'' );
// Shop
elseif ( $parent_cat == ''shop'' ) woocommerce_get_template( ''archive-product.php'' );
Creo que sería mejor ejecutar un ciclo while para determinar el nombre de la categoría de nivel primario. Luego puede compararlo con las diferentes categorías principales que desea mostrar de forma diferente.
edit lab5_template_include()
debería usar is_product_category()
lugar de is_product_taxonomy()
que devuelve true en categoría de producto y archivos de etiqueta.
function lab5_template_include( $template ) {
if( is_product_category()){
$slug = get_query_var(''product_cat'');
$cat = get_term_by( ''slug'', $slug, ''product_cat'' );
$catParent = so_top_product_category_slug($cat);
// locate the new templates
if ( ''collectie'' == $catParent ) {
$new_template = locate_template( array( ''woocommerce/archive-product-collectie.php'' ) );
} elseif ( ''shop'' == $catParent ) ) {
$new_template = locate_template( array( ''woocommerce/archive-product-shop.php'' ) );
}
// set the new template if found
if ( '''' != $new_template ) {
$template = $new_template ;
}
}
return $template;
}
add_filter(''template_include'', ''lab5_template_include'', 20 );
edita correcciones de errores y mejora la eficiencia de so_top_product_category_slug()
. Ahora probado y funcionando.
// get the top-level parent product category from a term object or term slug
function so_top_product_category_slug($cat) {
if( is_object( $cat ) ){
$catid = $cat->term_id;
} else {
$cat = get_term_by( ''slug'', $cat, ''product_cat'' );
$catid = $cat->term_id;
}
$parentId = $cat->parent;
$parentSlug = $cat->slug;
while ($parentId > 0) {
$cat = get_term_by( ''id'', $parentId, ''product_cat'' );
$parentId = $cat->parent; // assign parent ID (if exists) to $catid
$parentSlug = $cat->slug;
}
return $parentSlug;
}