taxonomie personnalisée dans Permalink of Post

4

Il est possible de l'utiliser comme lien permanent pour un message:

/%category%/%postname%/

Mais disons que j'ai créé une taxonomie appelée "artiste". J'aimerais utiliser ceci pour mes messages:

/%artist%/%postname%/

Je sais que les taxonomies vous permettent d’énumérer leurs termes avec ceci:

/%artist%/%someartist%/

mais ce n’est pas ce que je cherche. Je souhaite modifier les URL POST, pas celles taxonomiques.

J'essaie ceci sur mon blog et cela ne fonctionne pas. Est-ce quelque chose qui peut être fait dans Wordpress?

    
posée Totomobile 28.06.2012 - 05:25

3 réponses

6

En supposant que votre taxonomie personnalisée s'appelle artist (et que vous ne remplacez pas le slug dans le paramètre rewrite ), vous pouvez utiliser la balise rewrite %artist% . WordPress implémente presque toutes les fonctionnalités pour utiliser ces balises de réécriture post-permaliens. Seules quelques petites adaptations sont nécessaires.

Construction du lien permanent

Tout d'abord, vous devrez utiliser le filtre post_link pour remplacer une "balise" personnalisée dans votre structure de requête:

/**
 * replace the '%artist%' tag with the first 
 * term slug in the artist taxonomy
 * 
 * @wp-hook post_link
 * @param string $permalink
 * @param WP_Post $post
 * @return string
 */
function wpse_56769_post_link( $permalink, $post ) {

    $default_term = 'no_artist';
    $terms = wp_get_post_terms( $post->ID, 'artist' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) )
        $term = current( $terms )->slug;
    else
        $term = $default_term;

    $permalink = str_replace( '%artist%', $term, $permalink );

    return $permalink;
}
add_filter( 'post_link', 'wpse_56769_post_link', 10, 2 );

Cette fonction ( wpse_56769_post_link ):

  • définit un slug de terme par défaut ( no_artist ) qui est utilisé comme solution de secours si la publication n’a pas de terme attribué dans la taxonomie de l’artiste,
  • récupère le premier terme attribué (par ordre alphabétique) de la taxonomie de l'artiste,
  • remplace la balise %artist% par le slug de ce terme.

Allez maintenant dans le menu Paramètres → Permaliens, choisissez l'option »Structure personnalisée« et écrivez: /%artist%/%postname%/ .

Dans les résultats, un post-lien permanent devrait ressembler à ceci:

Maintenant que le message post-permalien inclut le premier slug d'artiste, jetons un coup d'œil à l'acheminement.

Mettre à jour les liens permanents (Routing)

Vous remarquerez que le permalien est résolu correctement en un seul poste. Malheureusement, les permaliens de page sont cassés.

Pour résoudre ce problème, vous n'avez pas nécessairement besoin de modifier les règles de réécriture. La seule chose à faire est de changer l'état interne de WP_Rewrite . La propriété WP_Rewrite::use_verbose_page_link doit être définie sur TRUE . (C’est le comportement interne de WP_Rewrite lorsqu’on utilise les balises %category% ou %author% comme base pour les permaliens suivants.)

/**
 * set WP_Rewrite::use_verbose_page_rules to TRUE if %artist%
 * is used as the first rewrite tag in post permalinks
 * 
 * @wp-hook do_parse_request
 * @wp-hook page_rewrite_rules
 * @global $wp_rewrite
 * @param mixed $pass_through (Unused)
 * @return mixed
 */
function wpse_56769_rewrite_verbose_page_rules( $pass_through = NULL ) {

    $permastruct = $GLOBALS[ 'wp_rewrite' ]->permalink_structure;
    $permastruct = trim( $permastruct, '/%' );
    if ( 0 !== strpos( $permastruct, 'artist%' ) )
        return $pass_through;

    $GLOBALS[ 'wp_rewrite' ]->use_verbose_page_rules = TRUE;
    return $pass_through;
}
add_filter( 'page_rewrite_rules', 'wpse_56769_rewrite_verbose_page_rules', PHP_INT_MAX );
add_filter( 'do_parse_request',  'wpse_56769_rewrite_verbose_page_rules', PHP_INT_MAX );

L'état doit être modifié en deux points: do_parse_request car WP::parse_request() demande cet état et page_rewrite_rules lorsque les règles de réécriture sont générées.

Maintenant, le routage est fixe et les permaliens de page fonctionnent bien. (Après avoir nettoyé à nouveau les permaliens.)

Gestion du pseudo terme no_artist

Une dernière chose à propos de la chose no_artist : si la publication n'est affectée à aucun terme de la taxonomie de artist , le lien permanent est analysé avec les variables de requête suivantes:

name   => 'sample_post'
artist => 'no_artist'
page   => ''

Cela devrait conduire à un 404 car le terme n'existe pas. Le message name de la publication devant être unique, nous pouvons supprimer la variable de requête artist sur le filtre request :

/**
 * check for existing artist and set query to 404 if necessary
 *
 * @wp-hook parse_query
 * @param array $request_vars
 * @return array
 */
function wpse_56769_request_vars( $request_vars ) {

    if ( ! isset( $request_vars[ 'artist' ] ) )
        return $request_vars;

    if ( ! isset( $request_vars[ 'name' ] ) )
        return $request_vars;

    if ( 'no_artist' == $request_vars[ 'artist' ] )
        unset( $request_vars[ 'artist' ] );

    return $request_vars;
}
add_filter( 'request', 'wpse_56769_request_vars' );

Avec ce filtre, une publication telle que http://wordpress.dev/no_artist/sample-post/ sera trouvée correctement.

    
réponse donnée David 26.09.2014 - 18:49
1

Je pense que c'est ce que vous recherchez: liens permanents de type publication personnalisée

Ce plugin vous permet de modifier la structure de lien permanent d'un type de message personnalisé.

Pour installer ce plugin:

  1. Téléchargez le fichier custom-post-type-permalinks.zip sur votre ordinateur.
  2. Décompressez le fichier.
  3. Téléchargez le répertoire custom-post-type-permalinks sur votre répertoire / wp-content / plugins /.
  4. Activez le plugin via le menu "Plugins" de WordPress.

Vous pouvez également aller dans le menu "Plugins" de votre wordpress et cliquer sur "ajouter un nouveau". Recherchez ensuite ce plug-in en recherchant "Permaliens de type de message personnalisé" et installez-le en cliquant sur le bouton d'installation.

Un nouvel élément apparaîtra dans le menu à gauche de votre administrateur wordpress. Ici, vous pouvez modifier les paramètres en fonction de vos besoins (noms des taxonomies, etc.).

Plus tard, mon site a actuellement la structure permanente suivante "site.com/star/aristname/" qui répertorie ensuite tous les articles de cet artiste ou une page / article à propos de cet artiste.

Si vous recherchez ceci, vous pouvez créer une page d’archive pour votre type de publication personnalisé. Wordpress assumera automatiquement cette structure. Pour plus d'informations sur la création de votre propre page d'archive, accédez au site ici . (Si vous êtes vraiment à la recherche de cela, je peux l'expliquer plus en détail si vous le souhaitez)

    
réponse donnée Aleks 28.06.2012 - 09:08
0

Quand je voulais associer l'URL à la catégorie (quelle que soit sa structure), j'ai défini une liste de termes dans la structure de réécriture d'URL, mais dans mon cas, il n'y avait pas beaucoup de termes ...

les résultats étaient quelque chose comme réécrire la clé de la règle

publications/(annual-reports|articles|books|policy-briefs)/([^/]+).html?$ 

et la valeur de la règle

index.php?post_type=publication&category_publication=$matches[1]&publication=$matches[2]&paged=1

tout était lié au filtre rewrite_rules_array .

résultat visible sur enlace

    
réponse donnée Butuzov 13.11.2012 - 22:09

Lire d'autres questions sur les étiquettes