सहेजने से पहले मैं पोस्ट डेटा को कैसे संपादित कर सकता हूं?


19

मेरे पास एक प्लगइन है और मैं डेटाबेस को सहेजने से पहले कुछ फिल्टर के माध्यम से पोस्ट सामग्री को चलाने में सक्षम होना चाहूंगा। पर देख से प्लगइन एपीआई , मुझे लगता है कि दो हुक है कि देखो की तरह वे उपयोगी हो सकता है:

save_post
wp_insert_post

एकमात्र समस्या यह है कि ऐसा लगता है कि save_postचर को वापस करने की आवश्यकता नहीं है, और इसलिए मुझे नहीं पता कि सामग्री को कैसे फ़िल्टर किया जाए, और wp_insert_postप्रलेखित दिखता है।

मैं ऐसा कुछ करना चाहता हूं:

add_action('whatever_hook_name','my_function');

function my_function($post_content){
    return $post_content.' <br> This post was saved on '.time();
}

मैं टाइमस्टैम्प को जोड़ने से कुछ अधिक उपयोगी करने जा रहा हूं, अर्थात् कुछ रेगेक्स फिल्टर चला रहा हूं, लेकिन यह सामान्य प्रकार का फिल्टर / एक्शन है जिसे मैं जोड़ने की कोशिश कर रहा हूं।

अपडेट करें

कृपया ध्यान दें कि मैं डेटाबेस में सहेजे जाने के तरीके पर डेटा को इंटरसेप्ट करना चाहता हूं - जब पोस्ट में इसे प्रदर्शित नहीं किया जा रहा हो (जैसे: फ़िल्टर जोड़कर नहीं the_content)


नोट: आपके पास एक खराब डिज़ाइन है :-) 1. हर पोस्ट को सहेजा जाएगा, इस स्ट्रिंग को जोड़ा जाएगा। (यदि आप पिछले एक को हटा नहीं है, आप एक बहुत के "मिल This post was...:" 2. डेटा इस तरह इस एक पोस्ट :-) BTW के एक मेटा मूल्य के रूप में संग्रहित किया जाना चाहिए है save_postकहा जाता है के बाद डेटा बचा लिया गया था, इसलिए बाद यह डेटाबेस में सहेजा गया था (जो आप चाहते हैं) नहीं।
jave.web

जवाबों:


29

Wp_insert_post_data फिल्टर है कि कर सकते हैं:

add_filter( 'wp_insert_post_data' , 'filter_post_data' , '99', 2 );

function filter_post_data( $data , $postarr ) {
    // Change post title
    $data['post_title'] .= '_suffix';
    return $data;
}

2
मुझे सही दिशा में जा रहा है, धन्यवाद। मुझे लगता है कि आपको वास्तव में add_actionइसके बजाय उपयोग करने की आवश्यकता है add_filter। आपकी भी wpse35931_filter_post_dataऔर filter_handlerअसंगत हैं ...
cwd

1
यह निश्चित रूप से एक फिल्टर है। यद्यपि फ़िल्टर और क्रियाएं समान कार्यक्षमता पर आधारित हैं जो कुछ क्रॉसओवर की अनुमति देता है। यदि आप इसे एक कार्रवाई के रूप में उपयोग करते हैं, हालांकि, आप उस डेटा को वापस नहीं कर पाएंगे जो पूरे बिंदु को हटा देगा। आप डेटा को फ़िल्टर करना चाहते हैं और फिर उसे वापस कर सकते हैं।
जेक

2
wp_insert_post_dataकाम करता है, लेकिन ओपी (और शायद अन्य) क्या पूरा करना चाहते हैं, इसके लिए थोड़ा अधिक प्रबल है। इस स्थिति में एक सरल विकल्प content_save_pre@drzaus द्वारा अनुशंसित है।
रिनोगो

1
wp_insert_post_dataफ़िल्टर के लिए डेवलपर डॉक्स : developer.wordpress.org/reference/hooks/wp_insert_post_data
jave.web

क्या यह हुक तब प्राप्त होता है जब भी आप a) मैन्युअल रूप से wp_insert_post () को कॉल करते हैं, उदाहरण के लिए, जब भी कोई पोस्ट किसी भी तरह से बचती है (जैसे कि बैकएंड के माध्यम से, किसी भी तरह से पोस्ट को बचाया जा सकता है) , किसी और तरह ...)?
वादिम एच।


2

आप हुक की जांच भी कर सकते हैं pre_post_update

add_action('pre_post_update', 'before_data_is_saved_function');

function before_data_is_saved_function($post_id) {

}

1

बदलने के लिए सक्रिय विषय में निम्न कोड जोड़ें <shell>साथ [shell]सहेजने से पहले:

 add_filter('content_save_pre', 'my_sanitize_content', 10, 1);
 function my_sanitize_content($value) {
   return str_replace('<shell>', '[shell]', $value);
 }

0

यदि आप सभी पोस्ट के अंत में कुछ समान जोड़ना चाहते हैं, तो मेरा सुझाव है कि आप the_contentफ़िल्टर का उपयोग करें ।

function append_to_content( $content ) {
    global $post;
    return $content.'<br />This post was saved on '.$post->post_date;
}
add_filter( 'the_content', 'append_to_content' );

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