web-dev-qa-db-fra.com

Générer dynamiquement des URL enfants pour des publications ou des publications personnalisées

Comment puis-je avoir un post (ou post personnalisé) avec une URL définie:

www.test.com/category/post-name

et une URL enfant faisant référence à une section spécifique de ce post

www.test.com/category/post-name/sub-url

sans être obligé de créer une publication spécifique liée à cette URL enfant?

J'ai un post avec l'URL

www.test.com/category/post-name

provient du fichier content-product.php et je veux avoir une URL enfant comme

www.test.com/category/post-name/details

provient du fichier content-product-details.php qui fait référence/rappelle uniquement une section/partie de la publication.

En quelques mots, existe-t-il un moyen de créer la structure indiquée? Ou dois-je créer manuellement pour chaque message autant de sous-messages que d'URL enfant que je souhaite avoir?

1
user3791460

Je viens de terminer quelque chose comme ça (avec l'aide des gens de ce site).

Tout d’abord, vous devez ajouter le point de terminaison de réécriture à vos fonctions:

function wpa_read_endpoint(){
    add_rewrite_endpoint( 'sub-url', EP_PERMALINK);
}

add_action( 'init', 'wpa_read_endpoint' );

Assurez-vous d’aller ensuite dans la section permaliens de l’administrateur et enregistrez-le pour actualiser les paramètres de permalien.

Ajoutez ensuite du code pour changer de modèle en fonction des vars de requête:

function wpa_read_template( $template = '' ) {
    global $wp_query;
    if( ! array_key_exists( 'sub-url', $wp_query->query_vars ) ) return $template;

    $template = locate_template( 'templateFile.php' );
    return $template;
}
add_filter( 'single_template', 'wpa_read_template' );

Quelques notes:

  • Reportez-vous à add_rewrite_endpoint info pour différents 'endroits' (dans ce cas-ci 'EP_Permalink'), je faisais des pages donc il fallait changer. ( http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint )
  • Toute modification apportée au code add_rewrite_endpoint devra être actualisée en retournant à la section des permaliens dans Admin.
  • Lors de l'ajout du filtre de modèle (add_filter), assurez-vous de noter le bon modèle 'type', dans ce cas single_template. Encore une fois, j'utilisais des pages, donc c'était page_template.

Bonne chance!

2
Brian Miksic

Je dirais que ce que vous devez approfondir est le Rewrite API et points de terminaison , pour commencer, voir:

De plus, utilisez la recherche ici, car il existe déjà des questions similaires, ce qui vous aidera certainement.

Dernière remarque, faire de telles choses manuellement peut prendre beaucoup de temps. Je préférerais donc l’automatiser. À la fin, il s’agit probablement d’une évaluation entre investir temps/argent maintenant et avantages ultérieurs - c’est à vous de décider.

0
Nicolai