जब किसी पोस्ट को कूड़ेदान में ले जाया जाता है, तो निष्पादित करने का कार्य।


9

नमस्ते एक एक्शन है जिसे पोस्ट करने के दौरान ट्रैश में ले जाया जा सकता है .... मैंने delete_post और delete_post की कोशिश की। यह प्रत्येक क्रिया के लिए दो बार काम करता है (कोडेक्स में लिखित क्रिया के पहले और बाद में) और आउटपुट केवल तब दिखाया जाता है जब पोस्ट को ट्रैश से हटा दिया जाता है। उदाहरण मैं लेखक को एक ईमेल भेजना चाहता हूं जिसमें कहा गया है कि किसी कारण से उसकी पोस्ट को रद्दी में स्थानांतरित कर दिया गया है, और कुछ उपयोगकर्ता-मेटा को अपडेट करें। अगर मैं उपयोग करता हूँ

add_action('deleted_post', 'emailUser');

या

add_action('delete_post', 'emailUser');

यह केवल तभी काम करता है जब पोस्ट कचरा से हटा दिया जाता है। । ।

अद्यतन: यह कचरा पोस्ट का उपयोग करने के लिए काम करने के लिए मिला है

add_action('trash_post', 'emailUser');

लेकिन फ़ंक्शन के दोहरे निष्पादन के लिए समस्या अभी भी है। । ।


1
नीचे दिए गए समाधान को लिखें और इसे उत्तर के रूप में चिह्नित करें
Ashfame

इसका उचित उत्तर नहीं है क्योंकि समारोह का दोहरा निष्पादन अभी भी है ...
हरजीत सिंह

जवाबों:


10

यह कर देगा चाल!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

यहां हम फ़ंक्शन जोड़ते हैं, और हुक को एक से अधिक बार निष्पादित करने से रोकने के लिए did_action का उपयोग करते हैं:

http://codex.wordpress.org/Function_Reference/did_action

हमेशा की तरह, हुक के इन प्रकार के रूप ले {post_status}_{post_type}, इसलिए trash_post, trash_page, trash_customposttype, publish_pageआदि


2

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

आपका फ़ंक्शन नाम में पोस्ट आईडी के साथ एक विकल्प की उपस्थिति की जांच कर सकता है, यदि विकल्प नहीं है तो यह ईमेल भेजता है और फिर विकल्प सेट करता है। यदि विकल्प है (जैसे कि इसे दूसरी बार कहा जा रहा है) तो आप ईमेल नहीं भेजेंगे।

फिर विकल्प को हटाने के लिए याद रखें, ताकि आपका डेटाबेस उनके साथ न भरे!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

मुझे बताएं कि क्या वह काम करता है!


आप यात्रियों के लिए विकल्पों के बजाय एपीआई का उपयोग कर सकते हैं ताकि आप डेटाबेस से विकल्प को हटाने की चिंता की जरूरत नहीं होगी codex.wordpress.org/Transients_API
Bainternet

धन्यवाद साइमन जो महान काम करता है। । । । पता नहीं कैसे n मैं क्यों यह याद किया। । ..
हरजीत सिंह

बैनटर्नट, मैंने ग्राहकों को देखा और वे मेरे मामले में get_option के समान हैं और मैं डिलीट चीज़ के लिए get_option के साथ छड़ी करता हूं क्योंकि निष्पादन सर्वर के प्रदर्शन पर भी निर्भर करेगा और हटाने से पहले और बाद में कोड निष्पादन समय की गणना। पोस्ट मुश्किल हो सकता है।
हरजीत सिंह

अतिरिक्त प्रश्नों को जोड़कर / संपादन विकल्प फ़ील्ड या ट्रांज़िस्टर शुरू करने के लिए बिल्कुल भी ज़रूरत नहीं है। इसके बजाय बस कॉल किया did_action जाँच करने के लिए कि क्या हुक पहले से ही निकाल दिया गया है।
टॉम जम्मू नॉवेल

1
add_action('trash_post', 'trash_post_function_name');

उपरोक्त हुक ने WP 4.7.5 में मेरे लिए काम नहीं किया।

इसी से मेरा काम बना है

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