パーマリンクの後に追加のパラメーターを追加しますか?


16

特にカスタム投稿タイプを使用している場合、パーマリンクの後に追加のパラメーターを追加するにはどうすればよいですか?

たとえばhttp://mysite/album/record-name、パーマリンクだったとしましょう。http://mysite/album/record-name/related404やリダイレクトを無効にするにはどうすればよいですか?

投稿が存在しない場合、WordPressは投稿テンプレートを呼び出さないようです。


1
mysite / album / record-name /?type = relatedを実行できることに気付きましたが、それは問題を解決しません。素敵なURL形式で望んでいます。WordPressをオーバーライドするために、nginx側で書き直せるかもしれないと思っていますが、可能であればWordPress内でこれを処理したいです。
relm

回答:


17

URIにエンドポイントを追加して、特別な要求を処理できます。

プラグインとしての基本的な例を次に示します。何が起こっているのかを理解するには、クリストファー・デイビスの素晴らしいチュートリアルA(ほとんど)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;
}

12

Rewrite APIadd_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;
}

テンプレートでは、関連するクエリ変数がいつ存在するかを検出できます。

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

wpse51444はどういう意味ですか?これは、何かと衝突しないようにするための長い文字列ですか?
ヘキソデュス

@Hexodusはい、wpse = wp stackexchange、51444はこの質問のIDです。あなたはそれを好きなものに変えることができますが、あなたがユニークだとわかっているものを使うのは良いことです。
ミロ

1
ああ、ミロに説明してくれてありがとう-これは非常に神秘的だった;)
ヘクソダス

@Hexodus私はそれがまったく神秘的だとは思わなかった。
ナビルカディミ14年


1

投稿URL(パーマリンク)にパラメーター追加するには、次のように使用します。

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

出力:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.