2 args के साथ फ़िल्टर कैसे जोड़ें?


9

मैं निम्नलिखित फिल्टर में $ पथ को संशोधित करना चाहता हूं। इसमें 1 इनपुट और 2 आरजीएस है।

function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

यह फिल्टर जोड़ने का मेरा कार्य है, इसे त्रुटि संदेश मिलता है, इसे सही कैसे प्राप्त करें?

function my_template( $template = '' ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

मैंने निम्नलिखित के रूप में अपने रिटर्न मान को बदलने की कोशिश की, यह या तो काम नहीं करता है:

return apply_filters( 'my_template', $path, $template);

नीचे दिए गए उत्तरों के साथ, मेरा नया फ़िल्टर अभी भी काम नहीं कर रहा है, इसलिए, शायद यह इसलिए है क्योंकि मेरा फ़िल्टर एक कक्षा में है? यहाँ पूरी तरह से नया कोड है:

Class My_Class{
  function __construct() {
     add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );
  }
 function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
 }
}

जवाबों:


10
function my_locate_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_locate_template', 10, 2 );

add_filter 4 चर लेता है। पहले और दूसरे की आवश्यकता है। 1. फिल्टर का नाम, 2. फ़ंक्शन का नाम। तीसरा प्राथमिकता है (जब फ़ंक्शन निकाल दिया जाता है)। और चौथा है मापदंडों की मात्रा। यदि आप तर्कों की मात्रा निर्धारित करते हैं, तो आपको उन्हें अपने फ़ंक्शन में भी रखना होगा। उदाहरण के लिए,

add_filter( 'the_filter','your_function', 10, 1 );
function your_function($var1) {
   // Do something
}

यदि फ़िल्टर अधिक तर्कों का समर्थन करता है (इस मामले में 3)

   add_filter( 'the_filter','your_function', 10, 3 );
    function your_function($var1, $var2, $var3) {
       // Do somthing
    }

Add_filter () के बारे में जानकारी के लिए सभी कोडेक्स पढ़ें


function documents_template( $template = '' ) {

       $path = DOCUMENTS_INCLUDES_DIR . '/document/' . $template;

  return apply_filters( 'document_template', $path, $template );
}

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'document_template','my_template', 10, 2 );

यह कोड मेरे लिए काम करता है। क्या आपने यह कोशिश की?


अपने वर्ग परिवर्तन में:

add_filter( 'document_template', array( $this, 'my_template',10, 2 ) );

सेवा:

add_filter( 'document_template', array( $this, 'my_template'), 10, 2  );

my_template फ़ंक्शन में अधिक इनपुट जोड़ें या तो काम नहीं करता है।
जेनी

क्या आपको कोई त्रुटि मिलती है?
रोब वर्मे

हां, सभी त्रुटि समान है: call_user_func_array पैरामीटर 1 को एक वैध कॉलबैक होने की उम्मीद करता है, सरणी में ठीक दो सदस्य होने चाहिए
जेनी

मैंने अपना उत्तर संपादित किया। यदि आप अपने कोड को हटा देते हैं तो त्रुटि हो गई है, है ना?
रोब वर्मियर

हां, मैं अपने कोड को इससे बदल देता हूं, फिर भी काम नहीं कर रहा है।
जेनी

2

ये मैच की जरूरत है, लेकिन नहीं:

apply_filters( 'document_template', $path, $template );

तथा

add_filter( 'documents_template','my_template', 10, 2 );

document_template ! = documents_template

अन्यथा, सब कुछ सही लगता है।

संपादित करें

रुको, सब कुछ सही नहीं लग रहा है। मुझे नहीं लगता कि आप अपने कॉलबैक फ़ंक्शन की परिभाषा में एक पैरामीटर जोड़ना चाहते हैं। इसके बजाय, आपको $templateकॉलबैक के भीतर परिभाषित करने की आवश्यकता है , या बस इसे अनमॉडिफाइड वापस पास करें। तो, इसे प्रतिस्थापित करें:

function my_template( $template = '' ){

...इसके साथ:

function my_template(){

उदाहरण के लिए:

function my_template(){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

संपादित करें २

ठीक है, मेरी ओर से छोटी सी गलती। इसे अपने कॉलबैक के रूप में आज़माएं:

function my_template( $path, $template ){

      $path = MY_INCLUDES_DIR . '/document/'. $template;

     return $path;
}
add_filter( 'documents_template','my_template', 10, 2 );

'दस्तावेज' = 'दस्तावेजों' की गलती के लिए खेद है। अब आपके नए फ़ंक्शन के साथ, यह अभी भी काम नहीं कर रहा है। त्रुटि कहती है call_user_func_array पैरामीटर 1 को एक वैध कॉलबैक होने की उम्मीद करता है, सरणी में ठीक दो सदस्य होने चाहिए
जेनी

मेरी गलती; आप करते कॉलबैक फ़ंक्शन परिभाषा में पैरामीटर जोड़ने की जरूरत है। अद्यतन उत्तर देखें।
चिप बेनेट

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