Tambahkan parameter tambahan setelah permalink?

16

Bagaimana saya bisa menambahkan parameter tambahan setelah permalink, khususnya jika saya menggunakan jenis posting khusus?

Misalnya, katakanlah http://mysite/album/record-nameadalah permalink. Bagaimana saya bisa membuat http://mysite/album/record-name/related404 atau redirect?

WordPress sepertinya tidak memanggil template posting jika postingan itu tidak ada ... jadi saya sedikit bingung bagaimana melakukan ini.

relm
sumber
1
Saya baru sadar saya bisa melakukan mysite / album / record-name /? Type = related tetapi itu tidak menyelesaikan masalah saya, karena saya menginginkannya dalam format URL yang bagus. Saya pikir saya mungkin bisa menulis ulang di sisi nginx untuk mengesampingkan WordPress, tapi saya lebih suka menangani ini di WordPress jika memungkinkan.
relm

Jawaban:

17

Anda dapat menambahkan titik akhir ke URI Anda untuk menangani permintaan khusus.

Berikut ini adalah contoh dasar sebagai plugin. Untuk memahami apa yang terjadi, bacalah tutorial lengkap A (Sebagian Besar) yang fantastis dari Christopher Davis untuk WordPress Rewrite API .

<?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;
}
fuxia
sumber
12

Anda dapat melakukan ini dengan Rewrite API 's 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;
}

Dalam templat Anda dapat mendeteksi kapan kueri terkait Anda hadir:

if( array_key_exists( 'related' , $wp_query->query_vars ) ):
    // current request ends in related
endif;
Milo
sumber
Apa arti dari wpse51444? Apakah ini hanya tali gondrong untuk memastikan tidak bertabrakan dengan sesuatu?
Hexodus
@Hexodus ya, wpse = wp stackexchange, 51444 adalah id dari pertanyaan ini. Anda dapat mengubahnya menjadi apa pun yang Anda inginkan, tetapi ada baiknya menggunakan sesuatu yang Anda tahu akan unik.
Milo
1
Oh Terima kasih Milo untuk klarifikasi - ini sangat misterius;)
Hexodus
@Hododus, saya sama sekali tidak merasa misterius.
Nabil Kadimi
Jangan lupa untuk membersihkan permalink .
Charlie Vieillard
1

untuk menambahkan parameter untuk mengirim url (permalink), saya menggunakan seperti ini:

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

keluaran:

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

T.Todua
sumber