web-dev-qa-db-fra.com

Comment obtenir un lien de catégorie de produit WooCommerce par ID?

Les catégories de produits de WooCommerce sont une taxonomie personnalisée appelée product_cat. Dans une fonction que j'écris, j'utilise get_categories avec le paramètre taxonomy défini sur product_cat. Tout fonctionne bien et je peux obtenir le terme id, le nom et même la limace. Ce que je n'arrive pas à comprendre, c'est comment obtenir le lien à afficher. Apparemment, get_category_link ne fonctionne pas avec la taxonomie personnalisée et get_term_link ne fonctionne pas non plus, je reçois une erreur. Voici ce que j'ai

$prod_cat_args = array(
  'taxonomy'     => 'product_cat', //woocommerce
  'orderby'      => 'name',
  'empty'        => 0
);

$woo_categories = get_categories( $prod_cat_args );

foreach ( $woo_categories as $woo_cat ) {
    $woo_cat_id = $woo_cat->term_id; //category ID
    $woo_cat_name = $woo_cat->name; //category name

    $return .= '<a href="' . get_category_link( $woo_cat_id ) . '">' . $woo_cat_name . '</a>';
}//end of $woo_categories foreach  

Suggestions?

5
RachieVee

Une autre mise à jour (septembre 2015):

I can utilise get_term_link après tout. Le problème était que la chaîne devait être convertie en un entier. Utilisé un astuce Stack Overflow pour le moyen le plus rapide de la convertir en utilisant la valeur (int) $ en PHP.

Donc, cela ressemblerait à ceci si vous ne voulez pas utiliser le slug dans la boucle foreach:

$woo_cat_id_int = (int)$woo_cat_id; //convert 

Cette valeur convertie est utilisée à la place du slug dans get_term_link. J'espère que ça aide quelqu'un. :-)


On dirait que je l'ai compris.

J'ai utilisé get_term_link . Et j'avais une erreur parce que je l'utilisais de cette façon:

get_term_link( $woo_cat_id, 'product_cat' );

Ce qui m'a donné cette erreur:

L'objet de la classe WP_Error n'a pas pu être converti en chaîne

J'ai donc choisi cette route avec la slug et cela a fonctionné:

$prod_cat_args = array(
  'taxonomy'     => 'product_cat', //woocommerce
  'orderby'      => 'name',
  'empty'        => 0
);

$woo_categories = get_categories( $prod_cat_args );

foreach ( $woo_categories as $woo_cat ) {
    $woo_cat_id = $woo_cat->term_id; //category ID
    $woo_cat_name = $woo_cat->name; //category name
    $woo_cat_slug = $woo_cat->slug; //category slug


    $return .= '<a href="' . get_term_link( $woo_cat_slug, 'product_cat' ) . '">' . $woo_cat_name . '</a>';
}//end of $woo_categories foreach  
12
RachieVee

Merci, j'utilise

foreach ( $terms as $term ) {
$term_link = get_term_link( $term );
 echo '<li><a href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
}

Ça fonctionne parfaitement.

1
william007
$prod_cat_args = array(
'taxonomy'     => 'product_cat', //woocommerce
            'orderby'      => 'name',
            'empty'        => 0
            );

            $terms = get_categories( $prod_cat_args );
            //$term_id=6;
            foreach ( $terms as $term ) {
            $term_link = get_term_link( $term );
            echo '<li><a class="shopping-now" href="' . esc_url( $term_link ) . '">' . $term->name . '</a></li>';
            }

get_term_link() fonctionne correctement lorsque vous utilisez l'objet renvoyé par get_categories().

0
Devendra chauhan