पर्मलिंक के बाद अतिरिक्त पैरामीटर जोड़ें?


17

मैं एक पर्मलिंक के बाद अतिरिक्त पैरामीटर कैसे जोड़ सकता हूं, खासकर अगर मैं कस्टम पोस्ट प्रकार का उपयोग कर रहा हूं?

उदाहरण के लिए, मान लीजिए http://mysite/album/record-nameकि यह पर्मलिंक था। मैं http://mysite/album/record-name/related404 या रीडायरेक्ट को कैसे चालू नहीं कर सकता ?

यदि पोस्ट मौजूद नहीं है, तो वर्डप्रेस पोस्ट टेम्पलेट को कॉल नहीं करता है ... इसलिए मैं थोड़ा नुकसान में हूं कि यह कैसे करना है।


1
मुझे बस एहसास हुआ कि मैं mysite / album / record-name /? Type = related कर सकता हूं, लेकिन यह मेरे मुद्दे को हल नहीं करता है, जैसा कि मैं एक अच्छे URL प्रारूप में चाहता हूं। मैं सोच रहा हूं कि मैं शायद वर्डप्रेस को ओवरराइड करने के लिए नग्नेक्स साइड पर फिर से लिख सकता हूं, लेकिन अगर संभव हो तो मैं वर्डप्रेस के भीतर इसे संभालूंगा।
relm

जवाबों:


18

आप विशेष अनुरोधों को संभालने के लिए अपने यूआरआई में एक समापन बिंदु जोड़ सकते हैं।

यहाँ प्लगइन के रूप में एक बुनियादी उदाहरण है। यह समझने के लिए कि क्रिस्टोफर डेविस के शानदार ट्यूटोरियल ए (अधिकतर) वर्डप्रेस रीराइट एपीआई के लिए पूर्ण गाइड क्या है

<?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 के साथ कर सकते हैं :

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 इस प्रश्न की आईडी है। आप इसे अपनी पसंद के अनुसार बदल सकते हैं, लेकिन कुछ ऐसा उपयोग करना अच्छा होगा जिसे आप जानते हैं कि यह अद्वितीय होगा।
मिलो

1
ओह, शुक्रिया के लिए मिलो धन्यवाद - यह बहुत रहस्यमय था;)
हेक्सोडस

@ हेक्सोडस मुझे यह बिल्कुल रहस्यमय नहीं लगा।
नबील कादिमी


2

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.