ब्लॉग
वर्डप्रेस हुक आर्किटेक्चर: एक्शन बनाम फ़िल्टर समझाया गया
हर महान प्लगइन की नींव। जानें कि PAGEnza AI कैसे रखरखाव योग्य, स्केलेबल कोड बनाने के लिए हुक और फ़िल्टर का उपयोग करता है।
हर वर्डप्रेस प्लगइन दो में से एक काम करता है: यह एक विशिष्ट क्षण में कोड चलाता है (एक्शन), या यह उपयोग किए जाने से पहले एक मान को संशोधित करता है (फ़िल्टर)। बस। पूरा वर्डप्रेस प्लगइन इकोसिस्टम इस अंतर पर बनाया गया है।
अंतर को समझना — और यह कब उपयोग करना है — वह है जो काम करने वाले प्लगइन्स को समस्याएँ पैदा करने वाले प्लगइन्स से अलग करता है।
एक्शन: एक समय बिंदु पर कुछ करें
एक्शन हुक एक संकेत है जो वर्डप्रेस (या कोई अन्य प्लगइन) एक विशिष्ट क्षण में भेजता है। आप उस संकेत से एक फ़ंक्शन जोड़ते हैं, और जब संकेत फायर होता है तो आपका फ़ंक्शन चलता है।
add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );
function my_plugin_load_assets() {
wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}
wp_enqueue_scripts तब फायर होता है जब वर्डप्रेस फ्रंट-एंड के लिए एसेट्स लोड करने की तैयारी कर रहा होता है। इसमें हुक करना CSS और JS लोड करने का सही तरीका है — सीधे टेम्प्लेट में <script> टैग ड्रॉप करना नहीं।
सामान्य एक्शन हुक जिनका आप लगातार उपयोग करेंगे:
init— जल्दी चलता है, पोस्ट प्रकार और टैक्सोनॉमी को रजिस्टर करने के लिए अच्छा हैwp_enqueue_scripts— फ्रंट-एंड एसेट्स लोड करेंadmin_enqueue_scripts— एडमिन एसेट्स लोड करेंsave_post— पोस्ट सहेजे जाने पर चलता है, कस्टम फ़ील्ड को प्रोसेस करने के लिए अच्छा हैwp_ajax_{action}— प्रमाणित उपयोगकर्ताओं से AJAX अनुरोधों को हैंडल करेंwp_ajax_nopriv_{action}— लॉग-इन न किए गए उपयोगकर्ताओं से AJAX को हैंडल करें
फ़िल्टर: उपयोग किए जाने से पहले एक मान को संशोधित करें
फ़िल्टर हुक आपको एक मान देता है, आपको इसे संशोधित करने देता है, और आपसे संशोधित संस्करण वापस करने की अपेक्षा करता है। वर्डप्रेस तब मूल के बजाय आपके संशोधित मान का उपयोग करता है।
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Ready to try PAGEnza? <a href="#">Get started free →</a></div>';
return $content . $cta;
}
महत्वपूर्ण नियम: हमेशा फ़िल्टर से कुछ वापस करें। यदि आप return भूल जाते हैं, तो मान शून्य हो जाएगा और आपने जो कुछ भी इसका उपयोग कर रहा था उसे तोड़ दिया है।
सामान्य फ़िल्टर हुक:
the_content— डिस्प्ले से पहले पोस्ट सामग्रीthe_title— पोस्ट शीर्षकwp_nav_menu_items— नेविगेशन मेनू HTMLupload_mimes— अनुमत फ़ाइल अपलोड प्रकारplugin_action_links_{plugin-file}— प्लगइन्स सूची पृष्ठ पर दिखाए गए लिंक
PAGEnza AI हुक का उपयोग कैसे करता है
जब प्लगइन बिल्डर एक प्लगइन जेनरेट करता है, तो यह कंस्ट्रक्टर में हुक से जुड़े तरीकों के साथ कोड को एक क्लास के चारों ओर संरचित करता है। यह पैटर्न ग्लोबल फ़ंक्शन नाम टकराव से बचता है और कोड को व्यवस्थित रखता है।
class My_Plugin {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
add_filter( 'the_content', [ $this, 'append_content' ] );
}
public function register_post_type() { /* ... */ }
public function load_assets() { /* ... */ }
public function append_content( $content ) {
// always return
return $content;
}
}
new My_Plugin();
सुरक्षा स्कैन विशेष रूप से जांच करता है कि AJAX हैंडलर कुछ भी करने से पहले एक नॉनस चेक और एक क्षमता चेक दोनों शामिल करते हैं:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Security: verify nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Security: verify permissions
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Insufficient permissions', 403 );
}
// Now safe to process
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
इनमें से किसी एक की कमी को सुरक्षा समस्या के रूप में फ़्लैग किया जाता है और प्लगइन को जारी होने से रोकता है।
प्राथमिकता और हुक कतार
जब एक ही हुक से कई फ़ंक्शन जुड़े होते हैं, तो वे प्राथमिकता के क्रम में चलते हैं (कम संख्या = पहले चलता है)। डिफ़ॉल्ट प्राथमिकता 10 है।
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // default
add_action( 'init', 'runs_last', 20 );
यह तब मायने रखता है जब आपके प्लगइन को किसी अन्य प्लगइन के कोड से पहले या बाद में चलने की आवश्यकता होती है। यदि आप किसी ऐसी चीज़ को संशोधित कर रहे हैं जिसे कोई अन्य प्लगइन भी संशोधित करता है, तो प्राथमिकता नियंत्रित करती है कि कौन जीतता है।
एक सामान्य पैटर्न: यदि आप किसी थीम के फ़िल्टर को ओवरराइड कर रहे हैं, तो सुनिश्चित करने के लिए प्राथमिकता 20 या उससे अधिक का उपयोग करें कि आप थीम के कोड के बाद चलते हैं।
हुक हटाना
आप किसी ऐसे हुक को हटा सकते हैं जिसे किसी और ने जोड़ा है — जिसमें थीम और प्लगइन हुक शामिल हैं:
remove_action( 'wp_head', 'wp_generator' ); // removes WP version from <head>
remove_filter( 'the_content', 'wpautop' ); // removes automatic paragraph wrapping
पकड़: आप केवल तभी हुक हटा सकते हैं जब आप remove_action/remove_filter को कॉल करते हैं जब मूल add_action/add_filter चल चुका हो। इसके लिए आमतौर पर आपके हटाने को बाद के एक्शन में हुक करने की आवश्यकता होती है।