¿Agregar parámetros adicionales después del enlace permanente?

15

¿Cómo puedo agregar parámetros adicionales después de un enlace permanente, específicamente si estoy usando un tipo de publicación personalizada?

Por ejemplo, digamos que http://mysite/album/record-name fue el enlace permanente. ¿Cómo puedo hacer que http://mysite/album/record-name/related no suba un 404 o redirija?

WordPress no parece activar la plantilla de publicación si la publicación no existe ... así que no sé cómo hacerlo.

    
pregunta relm 08.05.2012 - 01:44

3 respuestas

15

Puede agregar un punto final a sus URI para manejar solicitudes especiales.

Aquí hay un ejemplo básico como plugin. Para entender lo que está pasando, lea el fantástico tutorial de Christopher Davis Una guía completa (en su mayoría) de la API de 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;
}
    
respondido por el fuxia 08.05.2012 - 02:24
11

Puedes hacer esto con Rewrite API 'a 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;
}

En la plantilla puede detectar cuándo está presente la var de su consulta relacionada:

if( array_key_exists( 'related' , $wp_query->query_vars ) ):
    // current request ends in related
endif;
    
respondido por el Milo 08.05.2012 - 02:23
1

para agregar parámetro a la url (enlace permanente), uso así:

add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post ) 
{
    return $url.'?my_pid='.$post->ID;
}

salida:

http://yoursite.com/pagename?my_pid=12345678

    
respondido por el T.Todua 01.04.2014 - 15:59

Lea otras preguntas en las etiquetas