เพิ่มพารามิเตอร์พิเศษหลังจากลิงก์มาหรือไม่


17

ฉันจะเพิ่มพารามิเตอร์เพิ่มเติมหลังจากลิงก์ได้อย่างไรโดยเฉพาะหากฉันใช้ประเภทโพสต์ที่กำหนดเอง

ตัวอย่างเช่นสมมติว่าhttp://mysite/album/record-nameเป็นลิงก์ถาวร ฉันจะทำให้http://mysite/album/record-name/relatedไม่เปิดใช้งาน 404 หรือเปลี่ยนเส้นทางได้อย่างไร

WordPress ดูเหมือนจะไม่เรียกแม่แบบโพสต์หากโพสต์ไม่มีอยู่ ... ดังนั้นฉันจะเสียวิธีการทำเช่นนี้


1
ฉันเพิ่งรู้ว่าฉันสามารถทำmysite / album / record-name /? type = relatedแต่นั่นไม่ได้แก้ปัญหาของฉันตามที่ฉันต้องการในรูปแบบ URL ที่ดี ฉันคิดว่าฉันอาจจะเขียนซ้ำทางด้าน nginx เพื่อแทนที่ WordPress แต่ฉันอยากจะจัดการกับมันภายใน WordPress ถ้าเป็นไปได้
relm

คำตอบ:


17

คุณสามารถเพิ่มจุดสิ้นสุดใน URIs ของคุณเพื่อจัดการคำขอพิเศษ

นี่คือตัวอย่างพื้นฐานเป็นปลั๊กอิน เพื่อให้เข้าใจถึงสิ่งที่เกิดขึ้นอ่านคริสเดวิส 's กวดวิชาที่ยอดเยี่ยมA (ส่วนใหญ่) เสร็จสมบูรณ์คู่มือเวิร์ดเพรส 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

คุณสามารถทำได้ด้วยadd_rewrite_endpointของRewrite API :

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

ในเทมเพลตที่คุณสามารถตรวจพบได้เมื่อมี var แบบสอบถามที่เกี่ยวข้อง

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

@ Hexodus ฉันไม่คิดว่ามันลึกลับเลย
นาบิลคาดิมิ

อย่าลืมที่จะล้าง Permalinks
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.