퍼머 링크 후 추가 매개 변수를 추가 하시겠습니까?


17

퍼머 링크 다음에 특히 맞춤 게시물 유형을 사용하는 경우 추가 매개 변수를 추가하려면 어떻게해야하나요?

예를 들어, http://mysite/album/record-name퍼머 링크 라고 가정 해 봅시다 . http://mysite/album/record-name/related404를 켜거나 리디렉션하지 않으 려면 어떻게 해야합니까?

게시물이 존재하지 않으면 WordPress에서 게시물 템플릿을 불러 오지 않는 것 같습니다 ... 그래서이 작업을 수행하는 방법이 약간 손실되었습니다.


1
방금 mysite / album / record-name /? type = related를 수행 할 수 있다는 것을 깨달았 지만 좋은 URL 형식으로 원하면 문제가 해결되지 않습니다. 나는 아마도 워드 프레스를 재정의하기 위해 nginx 측에서 다시 쓸 수 있다고 생각하지만 가능하면 워드 프레스 내에서 이것을 처리하려고합니다.
relm

답변:


17

특수 요청을 처리하기 위해 URI에 엔드 포인트를 추가 할 수 있습니다.

다음은 플러그인의 기본 예입니다. 무슨 일이 일어나고 있는지 이해하려면 Christopher Davis 의 환상적인 튜토리얼 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

@Hexodus 예, wpse = wp stackexchange, 51444 가이 질문의 ID입니다. 원하는대로 변경할 수 있지만 고유 한 것으로 알고있는 것을 사용하는 것이 좋습니다.
Milo

1
정화에

@ Hexodus 나는 그것을 전혀 신비로 찾지 못했습니다.
Nabil Kadimi

영구 링크플러시하는 것을 잊지 마십시오 .
Charlie Vieillard

2

url (permalink) 을 게시 하기 위해 매개 변수추가 하려면 다음과 같이 사용하십시오.

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.