web-dev-qa-db-fra.com

Comment modifier les structures d'URL dans les types d'articles et les taxonomies ou termes personnalisés

Je sais très bien que plusieurs articles traitent de la personnalisation de la structure d'URL permalink de types de messages personnalisés, taxonomies personnalisées et termes de taxonomie. Cependant, aucune d'entre elles n'est vraiment claire, ne fonctionne pas correctement ou ne cause de problèmes ailleurs.


Voici quelques liens qui couvrent déjà "une sorte de" couverture réécriture d'URL.

  1. Comment créer une structure de lien permanent avec des taxonomies et des types d'article personnalisés, tels que nom de base/taxe-parent/taxe-enfant/nom-type-post-personnalisé
  2. Types de poteaux personnalisés, taxonomies et permaliens
  3. Mélanger des structures de type de message personnalisé et de réécriture de taxonomie?

Je cherche à créer une structure d'URL permalien dans le sens de:

  • Nom du type de poste: voitures
  • Nom de la taxonomie: concessionnaires
  • Nom du terme: honda
  • Titre du poste: 123 Hot Rod Lane

Exemple de configuration de la structure idéale des URL permaliens:

Structure de permalien générique:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

Structure de permalien plus spécifique:

domain.com/cars/dealers/honda/123-hot-rod-lane/

  • /cars/ doit être accessible sous forme de liste d'archives de chaque message publié dans le type de message.
  • /cars/dealers/ doit être accessible sous forme de liste d'archives de chaque message publié dans la taxonomie.
  • /cars/dealers/honda/ doit être accessible sous la forme d'une liste d'archives de chaque publication faite avec ce terme de taxonomie.
  • /cars/dealers/honda/123-hot-rod-lane/ doit être accessible sous forme de vue unique de la publication dans le type de publication personnalisée de la voiture.

Pour que tout soit clair, personne ne fait de travail inutile pour répondre à cette question. Je n'ai PAS besoin d'autre chose que d'ajouter simplement les règles de réécriture correctes pour mon type de message, ma taxonomie et mes termes. Cette question concerne directement permalink l'URL de réécriture, et NON PAS la liste des publications ou des archives. Je dois simplement m'assurer que WordPress les reconnaît correctement, tout en utilisant des appels conditionnels tels que is_post_type_archive() ou is_tax() ou is_singular() , etc.

J'ai essayé plusieurs fois, à partir de nombreuses questions/réponses sur ce site. Rien ne semble fonctionner.

Voici mon type de message personnalisé enregistré et ma taxonomie personnalisée enregistrée:

    public function register_custom_data(){
        /* Register a post type for Cars. */
        $labels = array(
            'name' => _x('Cars', 'post type general name'),
            'singular_name' => _x('Car', 'post type singular name'),
            'add_new' => _x('Add New Car', 'Car'),
            'add_new_item' => __('Add New Car'),
            'edit_item' => __('Edit Car'),
            'new_item' => __('New Car'),
            'all_items' => __('All Cars'),
            'view_item' => __('View Car'),
            'search_items' => __('Search Cars'),
            'not_found' =>  __('No Cars found'),
            'not_found_in_trash' => __('No Cars found in Trash'), 
            'parent_item_colon' => '',
            'menu_name' => __('Cars')
        );
        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true, 
            'show_in_menu' => false, 
            'show_in_nav_menus' => false,
            'can_export' => true,
            'query_var' => true,
            'rewrite' => true,
            'menu_icon' => NULL,
            'capability_type' => 'post',
            'has_archive' => true, 
            'hierarchical' => false,
            'menu_position' => NULL,
            'supports' => array(
                'title', 
                'editor', 
                'thumbnail' 
            ),
            'rewrite' => array(
                'slug' => 'cars', 
                'with_front' => true
            )
        ); 
        register_post_type('mbe_cars', $args);

        /* Car Dealers */
        $labels = array(
            'name' => _x('Dealers', 'taxonomy general name'),
            'singular_name' => _x('Dealer', 'taxonomy singular name'),
            'search_items' =>  __('Search Dealers'),
            'all_items' => __('All Dealers'),
            'parent_item' => __('Parent Dealer'),
            'parent_item_colon' => __('Parent Dealer:'),
            'edit_item' => __('Edit Dealer'), 
            'update_item' => __('Update Dealer'),
            'add_new_item' => __('Add New Dealer'),
            'new_item_name' => __('New Dealer Name'),
            'menu_name' => __('Dealers')
        ); 

        $args = array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array(
                'slug' => 'dealers',
                'hierarchical' => true
            )
        );

        register_taxonomy('mbe_car_dealers', 'mbe_cars', $args);

        /* Update urls. */
        flush_rewrite_rules();
    }
4
Michael Ecklund

Je ne suis pas sûr que ce soit possible ou peut-être que ce ne soit tout simplement pas la meilleure approche. Voici mon raisonnement:

domain.com/post-type-name/taxonomy-name/term-name/post-title/

Les messages peuvent être associés à plusieurs termes. Il est donc possible qu’il existe plusieurs liens vers le même message:

domain.com/post-type-name/taxonomy-name/term-name/post-title/
domain.com/post-type-name/taxonomy-name/term2-name/post-title/
domain.com/post-type-name/taxonomy2-name/term3-name/post-title/
domain.com/post-type-name/post-title/

Selon comment vous y êtes arrivé.

Vous pourrez certainement avoir domain.com/post-type-name/taxonomy-name/term-name/, mais je pense que cela n’a pas vraiment de sens dans WordPress d’avoir un URI aussi long.

Je pense que cela pour 2 raisons:

  1. La possibilité de multiples termes de taxonomie (sans parler de plusieurs taxonomies attachées à un type de publication personnalisé ou à une publication) créerait de nombreux liens qui se chevauchent, ainsi que davantage de possibilités de supprimer les signets - disons que je marque par le signet /cars/dealers/honda/123-hot-rod ce n’était pas réellement Honda, c’était Toyota - changer le terme d’impôt lié au poste romprait ce lien. C'est peu probable, mais c'est possible.

  2. Franchement, c'est moins convivial. Bien que l'utilisateur moyen ne prête pas attention aux chemins Web sur lesquels il se trouve, il est plus facile de se souvenir de domain.com/cars/93-saturn-ion que de le mémoriser (ou de le comprendre) domain.com/cars/dealers/wonderland-auto/93-saturn-ion.

Lorsque vous êtes sur la page de cet article, la valeur par défaut "above_nav" dans la plupart des thèmes inclut de toute façon les termes de taxonomie avec la date sous le titre de la page, de sorte que les informations sont toujours là, de manière plus lisible et utilisable.

Exemple:

123 Hot Rod

publié le 2 novembre 2012 dans Wonderland Used Cars

3
Eric Holmes

Je ne voudrais pas soumettre ceci comme réponse, cependant, c'est un petit extrait étonnant qui relie vos taxonomies et vos termes.

add_filter('request', 'add_tags_and_categories');  
  function add_tags_and_categories($q) {
    if (isset($q['your_term_or_tax']) || isset($q['category_name'])) {
    $q['post_type'] = 'your_custom_post';   
      return $q;
  }  
return $q;
}

J'espère que cela peut vous aider dans votre cheminement vers une réponse. Je l'utilise couramment pour lier mes types de publications personnalisées aux/tags/&/category/built-in comme suit:

add_filter('request', 'add_tags_and_categories');  
 function add_tags_and_categories($q) {
   if (isset($q['tag']) || isset($q['category_name'])) {
     $q['post_type'] = get_post_types();

            return $q;
   }

 return $q;
}

À votre santé!

2
David