web-dev-qa-db-fra.com

Lien permanent personnalisé avec les termes de taxonomie des enfants

Cela peut ressembler à d’autres questions, mais je publie la mienne car je ne trouvais pas de réponse concluante qui me conviendrait.

Ce que vous devez savoir

J'ai un type d'article personnalisé (produits), avec une taxonomie personnalisée (collections). La taxonomie de mes collections est hiérarchique. Par exemple, j'ai une collection parente (salle de bains) qui contient un bon nombre de sous-collections.

Ce que j'essaie de faire

J'essaie d'obtenir des permaliens pour mes produits, qui incluent à la fois la collection parent et la collection enfant, exemple

 http://<domain>/products/bathroom/collection-1/postname

Ce que j'ai essayé

En gros, j'ai joué avec le paramètre rewrite lors de l'enregistrement de mon CPT et de ma taxonomie, ainsi qu'avec le hook 'post_type_link'.

J'ai réussi à le faire fonctionner partiellement , c'est-à-dire en affichant uniquement la collection parent dans le permalien.

Toute aide serait grandement appréciée, merci.

De plus, ma structure de lien permanent est la suivante: /% category% /% postname% /

Une partie de mon code

Enregistrement de CPT/taxonomie

 register_taxonomy( 'collection', array(  ), array(
      'label' => 'collections',
      'public' => TRUE,
      'show_ui' => TRUE,
      'hierarchical' => TRUE,
      'query_var' => 'collections',
      'rewrite' => TRUE
 ));

 register_post_type( 'product', array(
      'label' => 'products',
      'public' => TRUE,
      'publicly_queryable' => TRUE,
      'show_ui' => TRUE,
      'show_in_menu' => TRUE,
      'taxonomies' => array( 'collection' ),
      'supports' => array( 'title', 'editor', 'author', 'custom-fields' ),
      'rewrite' => array( 'slug' => 'products/%collection%', 'with_front' => false, 'hierarchical' => true )
 ));

flush_rewrite_rules();

crochet de type post-lien

 if( strpos( $permalink, '%collection%' ) === FALSE )
      return $permalink;

 $terms = wp_get_object_terms( $post->ID, 'collection' );
 $tax_slug = "";

 if( empty( $terms[0]->parent ) )
 {
      $tax_slug = $terms[0]->slug;// . "/" . $terms[1]-> slug;
      //Second part 404's my permalinks, so commented out
 }
 else
 {
      $tax_slug = $terms[1]->slug;// . "/" . $terms[0]-> slug;
      //Second part 404's my permalinks, so commented out
 }

 $permalink = str_replace( '%collection%', $tax_slug, $permalink );

 return $permalink;
1
Shane

Je peux répondre à ta question! J'ai moi-même eu exactement le même problème et je l'ai compris aujourd'hui, alors je sais exactement ce que vous devez faire.

Je donne des instructions très détaillées et un code à ma propre question, alors allez voir et voyez si cela résout le problème pour vous. Faites-moi savoir comment ça se passe ou si vous avez d'autres questions.

0
Jeff