Comment puis-je ajouter des paramètres supplémentaires après un permalien, en particulier si j'utilise un type de publication personnalisé?
Par exemple, supposons que http://mysite/album/record-name
soit le lien permanent. Comment puis-je faire en sorte que http://mysite/album/record-name/related
ne retourne pas un 404 ou une redirection?
WordPress ne semble pas appeler le modèle de publication si celle-ci n'existe pas ... je ne sais donc pas comment faire.
Vous pouvez ajouter un point de terminaison à vos URI pour traiter les demandes spéciales.
Voici un exemple de base en tant que plugin. Pour comprendre ce qui se passe, lisez le fantastique tutoriel de Christopher DavisUn guide complet de l'API Rewrite de WordPress }.
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: T5 Endpoint Example
* Description: Adds a permalink endpoint to posts named <code>epex</code>
*/
add_action( 'init', 't5_add_epex' );
function t5_add_epex()
{
add_rewrite_endpoint( 'epex', EP_PERMALINK );
}
add_action( 'template_redirect', 't5_render_epex' );
/**
* Handle calls to the endpoint.
*/
function t5_render_epex()
{
if ( ! is_singular() or ! get_query_var( 'epex' ) )
{
return;
}
// You will probably do something more productive.
$post = get_queried_object();
print '<pre>' . htmlspecialchars( print_r( $post, TRUE ) ) . '</pre>';
exit;
}
add_filter( 'request', 't5_set_epex_var' );
/**
* Make sure that 'get_query_var( 'epex' )' will not return just an empty string if it is set.
*
* @param array $vars
* @return array
*/
function t5_set_epex_var( $vars )
{
isset( $vars['epex'] ) and $vars['epex'] = true;
return $vars;
}
Vous pouvez le faire avec l’API Rewrite '/ add_rewrite_endpoint :
add_action( 'init', 'wpse51444_endpoint' );
function wpse51444_endpoint(){
add_rewrite_endpoint( 'related', EP_ALL );
}
add_filter( 'query_vars', 'wpse51444_query_vars' );
function wpse51444_query_vars( $query_vars ){
// add related to the array of recognized query vars
$query_vars[] = 'related';
return $query_vars;
}
Dans le modèle, vous pouvez détecter le moment où votre requête associée var est présente:
if( array_key_exists( 'related' , $wp_query->query_vars ) ):
// current request ends in related
endif;
to ajoute un paramètre à poster url (permalink), j'utilise comme ceci:
add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post )
{
return $url.'?my_pid='.$post->ID;
}
sortie:
http://yoursite.com/pagename?my_pid=12345678