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 veux modifier POST urls, pas ceux de taxonomie.
J'essaye ceci sur mon blog et ça ne marche pas. Est-ce quelque chose qui peut être fait dans Wordpress?
En supposant que votre taxonomie personnalisée s'appelle artist
(et que vous ne remplaciez 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. Il ne reste que quelques petites adaptations nécessaires.
Tout d'abord, vous devrez utiliser le filtre post_link
pour remplacer un "tag" personnalisé 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
):
no_artist
) qui est utilisé comme solution de secours si la publication ne comporte pas de termes attribués dans la taxonomie de l'artiste,%artist%
par le slug de ce terme.Maintenant, allez dans le menu Paramètres → Permaliens, choisissez l'option "Structure personnalisée" et écrivez dans: /%artist%/%postname%/
.
Dans le résultat, un post permalien devrait ressembler à ceci:
Maintenant que le billet contient le premier slug du terme d’artiste, jetons un coup d’œil à l’acheminement.
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 post.)
/**
* 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
à la génération des règles de réécriture.
Maintenant, le routage est corrigé et les permaliens de page fonctionnent bien. (Après avoir rincé les permaliens une fois de plus.)
no_artist
Une dernière chose à propos de la chose no_artist
: si la publication n'est vraiment affectée à aucun terme de la taxonomie 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. Comme la variable name
du message doit être unique, nous pouvons supprimer la variable de requête artist
du 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, un article comme http://wordpress.dev/no_artist/sample-post/
sera trouvé correctement.
Je pense que c’est ce que vous cherchez: Type de message personnalisé Permaliens
Ce plugin vous permet de modifier la structure de lien permanent du type de message personnalisé.
Pour installer ce plugin:
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 admin wordpress. Ici, vous pouvez modifier les paramètres en fonction de vos besoins (noms des taxonomies, etc.).
De plus, mon site a actuellement la structure permalien suivante "site.com/star/aristname/" qui répertorie ensuite tous les messages de cet artiste ou une page/un message à propos de cet artiste.
Si vous recherchez ceci, vous pouvez créer une page d'archive pour votre type d'article personnalisé. Wordpress assumera automatiquement cette structure. Pour plus d'informations sur la création de votre propre page d'archive, veuillez consulter here . (Si vous cherchez vraiment cela, je peux l'expliquer plus en détail si vous le souhaitez)
Lorsque je voulais accrocher 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 clé de règle de réécriture
publications/(annual-reports|articles|books|policy-briefs)/([^/]+).html?$
et valeur de la règle
index.php?post_type=publication&category_publication=$matches[1]&publication=$matches[2]&paged=1
tout était accroché avec rewrite_rules_array filter.
résultat vous pouvez voir à http://unu.edu/publications