Ajouter des paramètres supplémentaires après le permalien?

15

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 est le lien permanent. Comment 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.

    
posée relm 08.05.2012 - 01:44

3 réponses

15

Vous pouvez ajouter un noeud final à 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 didacticiel de Christopher Davis Guide complet (généralement) de l’API WordPress Rewrite .

<?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;
}
    
réponse donnée fuxia 08.05.2012 - 02:24
11

Vous pouvez le faire avec les API de réécriture 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;
    
réponse donnée Milo 08.05.2012 - 02:23
1

pour ajouter un paramètre à publier l'URL (permalien), 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

    
réponse donnée T.Todua 01.04.2014 - 15:59

Lire d'autres questions sur les étiquettes