Update_post_meta और delete_post_meta हुक कैसे करें?


29

मैं अभी भी इस पूरे हुकिंग में चीजों में अपना सिर लाने के लिए संघर्ष कर रहा हूं, इसलिए मैं वास्तव में निम्नलिखित कार्य करने की कोशिश कर रहा हूं:

यदि update_post_metaनिकाल दिया गया है, तो यह देखने के लिए जांचें कि क्या यह meta_keyकिसी चीज़ के बराबर है (यदि किसी विशेष मेटा_की का उपयोग किया जाता है तो मैं कुछ कोड को ट्रिगर करना चाहता हूं)। यदि मैं जिस मेटा कुंजी की तलाश कर रहा हूं, तो कुछ कोड चलाएं $post->IDजिन्हें मेटा कुंजी अपडेट होने की जानकारी होनी चाहिए ।

मैं delete_post_metaभी हुक करने की जरूरत है कि ऊपर की तरह रिवर्स करता है।

क्या कोई मुझे हुकिंग के लिए कुछ उदाहरण कोड प्रदान कर सकता है update_post_metaऔर delete_post_meta?

जवाबों:


45

update_post_metaहुक अधिक सामान्य से कहा जाता है update_metadata(), समारोह, तो आप इसे सीधे नहीं मिला है हो सकता है। तीन हुक हैं:

  • update_post_metadata, एक फिल्टर जो आपको मेटाडेटा अपडेट को "हाईजैक" करने की अनुमति देता है और कुछ और करता है। यदि आप एक फ़ंक्शन को झुकाते हैं जो एक बूलियन देता है, तो निष्पादन बंद हो जाता है और बूलियन वापस आ जाता है।
  • update_post_meta, डेटाबेस में डेटा को अपडेट करने से पहले कॉल किया जाता है।
  • updated_post_meta, डेटाबेस में डेटा अपडेट होने के बाद कॉल करने वाली क्रिया ।

यदि डेटाबेस में मेटा कुंजी मौजूद नहीं है, तो update_metadata() करने के लिए नियंत्रण गुजरता है add_metadata(), जो समान हुक है add_post_metadata, add_post_meta, और added_post_meta। ऐसा होने से पहले update[d]_post_metaकहा जाता है। इसलिए यदि आप कुछ करना चाहते हैं, जब मेटा कुंजी को जोड़ा या अपडेट किया जाता है, तो दोनों update*और हुक में हुक करना सुनिश्चित करें add*- लेकिन ध्यान दें कि जब updated_*और added_*क्रियाएं समान मापदंडों से गुजरती हैं, update_*और add_*( add_post_metaपहले मेटा आईडी पास नहीं करता है) ।

delete_metadata()इसी तरह हुक है: delete_post_metadata, delete_post_metaऔर deleted_post_meta

नमूना कोड:

add_action( 'added_post_meta', 'wpse16835_after_post_meta', 10, 4 );
add_action( 'updated_post_meta', 'wpse16835_after_post_meta', 10, 4 );
function wpse16835_after_post_meta( $meta_id, $post_id, $meta_key, $meta_value )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_do_something( $post_id, $meta_value );
    }
}

add_action( 'deleted_post_meta', 'wpse16835_deleted_post_meta', 10, 4 );
function wpse16835_deleted_post_meta( $deleted_meta_ids, $post_id, $meta_key, $only_delete_these_meta_values )
{
    if ( 'wpse16835_meta_key' == $meta_key ) {
        wpse16835_undo_something( $post_id );
    }
}

इसके लिए सुपर thx। मैं के बारे में जानकारी थी update_post_metaका उपयोग कर update_metadataऔर वहाँ में, वहाँ के लिए हुक था added_post_metaऔर updated_post_metaजहां तक मैं मिल सकता है के रूप में लेकिन thats। मुझे समझ में नहीं आया कि कैसे उपयोग करना है। लेकिन अब मुझे लगता है कि मुझे यह मिल गया है :)
ब्रैडी

3
विशेष रूप से, हुक हैupdated_{$post_type}_meta
बेंजामिन इंटल

8

जन उत्तर उस मामले को छोड़कर बहुत ऊपर कवर करता है जहां एक कस्टम मेटाडेटा संपादित पोस्ट पृष्ठ से हटा दिया जाता है। जैसे ही आप wp-admin / admin-ajax.php पर कॉल करके मेटाडाटा के तहत "डिलीट" बटन पर क्लिक करते हैं, यह एसिंक्रोनस रूप से होता है। दुर्भाग्यवश, कि कॉल delete_metadata()मेटाटैफ़ में फ़ंक्शन को बायपास करता है और delete_meta()wp-admin में कॉल करता है / इसमें / post.php को शामिल किया जाता है (wp- शामिल / पोस्ट.php के साथ भ्रमित होने की नहीं)।

2 क्रियाएं हैं जो अभी भी उपयोग की जा सकती हैं, delete_postmeta(हटाने से पहले), और deleted_postmeta(हटाने के बाद)। दोनों एक ही पैरामीटर को स्वीकार करते हैं $mid, जो कि मेटाडेटा की आईडी है ( कुंजी नहीं )। आप मेटाडेटा ऑब्जेक्ट का उपयोग करके पुनः प्राप्त कर सकते हैं:

$meta = get_post_meta_by_id($mid);  

जो meta_id, post_id, meta_key abd meta_value के साथ एक ऑब्जेक्ट देता है। बेशक, जब deleted_postmetaतक मेटाडेटा को हटा दिया जाता है, तब तक get_post_meta_by_id()काम नहीं किया जाएगा (जो थोड़े से काम को बेकार बनाता है)

एक ही संपादन पोस्ट पृष्ठ से एक कस्टम मेटाडेटा अद्यतन करने के लिए चला जाता है। update_metadata()समारोह (और उसके कार्यों) meta.php में है नहीं कहा जाता है, लेकिन update_meta()WP-व्यवस्थापक में समारोह / शामिल / post.php बजाय है। यहाँ फिर से दो क्रियाएँ, update_postmetaऔर updated_postmeta। आर्ग $ मेता_द, $ पोस्ट_िड, $ मेटा_की, $ मेटा_वल्यू हैं।

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