Thêm tham số sau khi permalink?


16

Làm cách nào tôi có thể thêm các tham số bổ sung sau permalink, cụ thể là nếu tôi đang sử dụng loại bài đăng tùy chỉnh?

Ví dụ, giả sử http://mysite/album/record-namelà permalink. Làm cách nào tôi có thể http://mysite/album/record-name/relatedkhông bật 404 hoặc chuyển hướng?

WordPress dường như không gọi lên mẫu bài đăng nếu bài đăng không tồn tại ... vì vậy tôi hơi mất phương hướng để làm điều này.


1
Tôi chỉ nhận ra rằng tôi có thể thực hiện mysite / album / record-name /? Type = có liên quan nhưng điều đó không giải quyết được vấn đề của tôi, vì tôi muốn nó ở định dạng URL đẹp. Tôi nghĩ rằng tôi có thể viết lại ở phía nginx để ghi đè lên WordPress, nhưng tôi muốn xử lý việc này trong WordPress nếu có thể.
Relm

Câu trả lời:


17

Bạn có thể thêm điểm cuối vào URI của mình để xử lý các yêu cầu đặc biệt.

Dưới đây là một ví dụ cơ bản như plugin. Để hiểu những gì đang diễn ra, hãy đọc hướng dẫn tuyệt vời của Christopher Davis Hướng dẫn đầy đủ (chủ yếu) về API viết lại WordPress .

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

Bạn có thể làm điều này với add_rewrite_endpoint của API Rewrite :

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

Trong mẫu bạn có thể phát hiện khi var truy vấn liên quan của bạn có mặt:

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

Wpse51444 có nghĩa là gì? Đây có phải chỉ là một chuỗi dài để đảm bảo không va chạm với một cái gì đó?
Hexodus

@Hexodus có, wpse = wp stackexchange, 51444 là id của câu hỏi này. Bạn có thể thay đổi điều đó thành bất cứ điều gì bạn thích, nhưng thật tốt khi sử dụng thứ bạn biết sẽ là duy nhất.
Milo

1
Oh Cảm ơn bạn Milo đã làm rõ - điều này rất bí ẩn;)
Hexodus

@Hexodus Tôi không thấy nó bí ẩn chút nào.
Nabil Kadimi


1

để thêm tham số để đăng url (permalink), tôi sử dụng như thế này:

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

đầu ra:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.