Kalıcı bağlantıdan sonra ek parametreler eklensin mi?


17

Bir kalıcı bağlantıdan sonra, özellikle de özel bir gönderi türü kullanıyorsanız, nasıl ilave parametreler ekleyebilirim?

Örneğin http://mysite/album/record-name, kalıcı bağlantı olduğunu varsayalım. Nasıl http://mysite/album/record-name/related404 veya yönlendirme yapmamı sağlayabilirim?

Gönderi yoksa WordPress gönderi şablonunu çağırmıyor ... Bu yüzden bunu nasıl yapacağım konusunda biraz kayboldum.


1
Ben sadece mysite / album / record-name /? Type = related yapabileceğimi fark ettim ama güzel bir URL formatında istediğim gibi sorunumu çözmedi. WordPress'i geçersiz kılmak için belki nginx tarafında bir yeniden yazma yapabileceğimi düşünüyorum, ancak mümkünse WordPress içinde bunu ele alacağım.
relm

Yanıtlar:


18

Özel istekleri işlemek için URI'larınıza bir uç nokta ekleyebilirsiniz.

İşte eklenti olarak temel bir örnek. Neler olup bittiğini anlamak için Christopher Davis'in fantastik öğreticisini WordPress Yeniden Yazma API'sı için A (Çoğunlukla) Tam Kılavuz'u okuyun .

<?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;
}

12

Sen ile yapabilirsiniz Rewrite API 'ler 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;
}

Şablonda, ilgili sorgu değişkeninizin ne zaman mevcut olduğunu tespit edebilirsiniz:

if( array_key_exists( 'related' , $wp_query->query_vars ) ):
    // current request ends in related
endif;

Wpse51444 ne anlama geliyor? Bu sadece bir şeyle çarpışmamak için uzunca bir ip mi?
Hexodus

@Hexodus evet, wpse = wp stackexchange, 51444 bu sorunun kimliğidir. Bunu istediğiniz herhangi bir şeyle değiştirebilirsiniz, ancak benzersiz olacağını bildiğiniz bir şeyi kullanmak iyidir.
Milo

1
Oh, clearification için teşekkür ederim - bu çok gizemli idi;)
Hexodus

@Hexodus hiç gizemli bulamadım.
Nabil Kadimi


2

için yazılan url parametre eklemek (kalıcı bağlantı), ben böyle kullanın:

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

çıktı:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.