web-dev-qa-db-fra.com

Comment changer le contenu de la chapelure de Woocommerce?

Je veux personnaliser la chapelure directement à partir de PHP. Certaines des pages sont générées de manière dynamique et n'existent pas dans la base de données. Par conséquent, je dois les mettre automatiquement dans le fil d'Ariane avec une sorte de script PHP.

Je n'ai pas besoin de changer les éléments par défaut, comme l'URL de la page d'accueil, les séparateurs, etc., mais il me faut en fait placer manuellement certaines pages dans le fil d'Ariane. J'essayais avec des filtrages et des crochets.

J'ai lu la documentation mais elle explique simplement comment changer les commandes par défaut.

Comment puis-je changer le contenu réel de la chapelure?

J'ai essayé ceci:

add_filter( 'woocommerce_breadcrumb', 'change_breadcrumb' );
function change_breadcrumb( $defaults ) {
    // Change the breadcrumb home text from 'Home' to 'Appartment'
    //do something
    return $defaults;
}

Mais le //do something ne s'exécute jamais. C'est comme si ce filtre n'était jamais appelé

2
Alberto Fontana

Cela est dû au fait que votre filtre woocommerce_breadcrumb n'existe même pas.

Ce filtre fonctionne et extrait tous les éléments qui se trouvent actuellement dans le fil d'Ariane (sous forme de tableau):

add_filter( 'woocommerce_get_breadcrumb', 'change_breadcrumb' );
function change_breadcrumb( $crumbs ) {
    var_dump( $crumbs );

    return $crumbs;
}

Et ce filtre extrait le main term (en tant qu’objet).

add_filter( 'woocommerce_breadcrumb_main_term', 'change_breadcrumb' );
function change_breadcrumb( $main_term ) {
    var_dump( $main_term );

    return $main_term;
}

Le terme principal n'est que le premier élément renvoyé par cette fonction ( reference ):

$terms = wc_get_product_terms( $post->ID, 'product_cat', array( 'orderby' => 'parent', 'order' => 'DESC' ) )

Voir le Action et référence de crochet de filtre par woothemes pour tous les crochets et filtres.

3
honk31

Cette solution masque la catégorie du fil d'Ariane et de la navigation dans les magasins.

add_filter( 'wp_get_object_terms', 'my_get_object_terms', 10, 4 );
function my_get_object_terms( $terms, $object_ids, $taxonomies, $args ) {
    $new_terms = array();

    // if a product category and on the shop page
    if (! is_admin() ) {
        foreach ( $terms as $key => $term ) {
            if ($term->slug !== 'all-products') {
                $new_terms[] = $term;
            }
        }

        $terms = $new_terms;
    }

    return $terms;
}
0
Mookie