web-dev-qa-db-fra.com

Permalink rewrite avec type de publication personnalisé et taxonomie personnalisée

Je pense que c'est rapide:

J'ai:

  1. Type de message personnalisé: Nourriture
  2. Taxonomie personnalisée (enregistrée pour les aliments): Fruits _
  3. Termes en Fruits: Apple, Orange, Cerise

Si je tape example.com/food?fruits=Apple,Cherry, je reçois tous les messages dans Fruits avec les termes Apple et Cherry, c'est génial!

Mais je voudrais taper exemple.com/food/fruits/Apple,Cherry ou exemple.com/food/Apple,Cherry pour obtenir le même résultat.

J'ai essayé différents permaliens et des plugins de réécriture liés aux publications personnalisées, mais rien n'y faisait.

Je vous remercie,

David

3
dee

Vous devez construire la structure de liens en utilisant les filtres post_link et post_type_link:

add_filter('post_link', 'territorio_permalink', 10, 3);
add_filter('post_type_link', 'territorio_permalink', 10, 3);

function territorio_permalink($permalink, $post_id, $leavename) {
if (strpos($permalink, '%territorio%') === FALSE) return $permalink;

// Get post
$post = get_post($post_id);
if (!$post) return $permalink;

// Get taxonomy terms
$terms = wp_get_object_terms($post->ID, 'territorio','orderby=term_order');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$taxonomy_slug = $terms[0]->slug.'/'.$terms[1]->slug; //build here
else $taxonomy_slug = 'not-yet';

return str_replace('%territorio%', $taxonomy_slug, $permalink);
}

hotel est le type de message et territorio est une taxonomie hiérarchique.

En post-création de type utiliser:

'rewrite' => array( 'slug' => 'anything-you-want/%territorio%','with_front' => false),

Note: si vous voulez des liens plus profonds, votre construction devrait aller plus loin:

$taxonomy_slug = $terms[0]->slug.'/'.$terms[1]->slug.'/'.$terms[2]->slug;
3
Diana