प्रकाशित के रूप में भविष्य के दिनांक को चिह्नित करना


13

उदाहरण:

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

फ़ंक्शन नीचे है।

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post','show', '_future_post_hook');
        add_action('future_post', 'show', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

1
क्या यह संभव है कि आपके remove_actionऔर add_actionकॉल में कोई त्रुटि हो ? आपका दूसरा पैरामीटर है 'show', लेकिन क्या यह वह फ़ंक्शन नहीं होना चाहिए जिसे आप जोड़ रहे हैं या निकाल रहे हैं?
Jan Fabry

जवाबों:


7

माइक और जान दोनों के जवाबों को मिला कर बहुत ही अच्छा लगा। हमें शो के सशर्त की जरूरत नहीं है क्योंकि 'Future_show' हुक केवल पोस्ट प्रकार के शो और अपडेट को पकड़ता है।

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_show','_future_post_hook');
        add_action('future_show','publish_future_post_now');
    }

    function publish_future_post_now($id) {
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

7

मैं यह सुनिश्चित करने के लिए नहीं कह सकता कि मेरे पास परीक्षण करने के लिए आपकी साइट नहीं है, लेकिन मेरा मानना ​​है कि आपको बस और कॉल 'show'से हटाने की आवश्यकता है । समारोह पोस्ट प्रकार के संबंध में नास्तिक है, कम से कम यह है कि यह क्या कोड को पढ़ने से प्रकट होता है है। तो यह प्रयास करें:remove_action()add_action()wp_publish_post()

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post', '_future_post_hook');
        add_action('future_post', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

बेशक, यदि आप केवल शो करने तक ही सीमित रहना चाहते हैं, तो आप ऐसा कुछ करना चाहते हैं (हालाँकि अन्य पोस्ट प्रकारों के साथ भी काम करने के लिए तर्क की आवश्यकता होगी, तो यह अधिक जटिल होगा):

function publish_future_post_now($id) {
    $post = get_post($id);
    if ('show' == $post->post_type)
        wp_publish_post($id);
}

उम्मीद है की यह मदद करेगा?


हाँ, कोड का पहला हिस्सा जो मैंने शुरू किया था और यह सामान्य वर्डप्रेस पोस्ट पर काम करता है लेकिन यदि आप 'शो' की सशर्त जोड़ते हैं तो यह किसी भी चीज़ पर काम नहीं करता है। सशर्त के बिना भी यह कस्टम पोस्ट प्रकार पर काम नहीं करता है।
२१:४47

मैंने आपके प्रश्न को कई बार पढ़ा है, लेकिन यह अभी भी मेरे लिए स्पष्ट नहीं है कि यदि आप सुझाए गए कोड को अनदेखा कर रहे हैं जो कि काम नहीं करता है तो आप क्या करने की कोशिश कर रहे हैं। क्या आप स्पष्ट कर सकते हैं कि वास्तव में आप क्या हासिल करने की कोशिश कर रहे हैं? क्या आप पोस्ट को उस दिनांक / समय पर प्रकाशित करना चाहते हैं जो पोस्ट_डेट में है, या कुछ और है? या आप पहले से ही इसे हल कर चुके हैं?
माइकस्किंकेल

यह पहले से ही हल है (मैंने नीचे कोड प्रदान किया है)। मैं सिर्फ कस्टम पोस्ट टाइप पोस्ट प्रकाशित करना चाहता था, भले ही भविष्य के लिए निर्धारित हो।
करिश्माचल

4

मुझे लगता है कि इस कार्रवाई को कहा जाता है wp_transition_post_status। कोड है:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}

तो सामान्य भविष्य के पदों के लिए अंतिम हुक होगा future_post, लेकिन आपके प्रकार के लिए यह होगा future_showया जो भी आपके प्रकार का स्लग है।


1

यदि आप सब करना चाहते हैं तो 'शो टाइम' के लिए एक अतिरिक्त तारीख जोड़ें, मेटा बॉक्स को जोड़ना आसान हो सकता है जो वास्तव में ऐसा करता है - इसे बिगाड़ने के लिए प्रकाशित तिथि का उपयोग करके संभावित रूप से समस्याग्रस्त हो सकता है, जैसा कि वर्डप्रेस इसे सेट करेगा "भविष्य" की स्थिति जब भी इसे भविष्य की प्रकाशित तिथि (मुझे लगता है) के साथ अपडेट किया जाता है, तो आपको इसे वापस सेट करने के लिए हर बार किसी पोस्ट को अपडेट करने के लिए हुक करना होगा। इसके अलावा, इस तरह से आप "प्रकाशित तिथि" को आरक्षित कर सकते हैं जो इसका उद्देश्य है।

मैं शायद सिर्फ एक meta_key, और एक कस्टम मेटा बॉक्स का उपयोग करूंगा । यद्यपि यह निर्भर करता है कि आपके प्रश्न कितने जटिल हैं जो पोस्ट दिखाते हैं।

यदि आप मेटाएवल्यू को टाइमस्टैम्प के रूप में सेट करते हैं, तो आप शो की तारीख अभी भी आदेश दे सकते हैं, या एक निश्चित तारीख से पहले / बाद का चयन कर सकते हैं:

$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );

वर्तमान तिथि से एक सप्ताह बाद के शोटाइम के साथ सभी "इवेंट" प्राप्त करेंगे। नोट: उपरोक्त अनुपलब्ध है, लेकिन काम करना चाहिए :)


मैं इस 100% से सहमत हूं - एक मेटा बॉक्स का उपयोग करने के लिए घटना की तारीख के लिए हैक के रूप में प्रकाशित तिथि का उपयोग करने से बेहतर है।
ट्रैविस नॉर्थकट 15

हाँ एक मेटा_बॉक्स काम करेगा लेकिन मुझे एक अच्छा jQuery दिनांक और समय पिकर जोड़ना मुश्किल लगा। स्टॉक WP एक जिस तरह से कुछ भी अच्छा था जिसकी मैं आ सकता था।
कर्टिसमेकल

WP आसान पोस्ट प्रकार प्लगइन एक कस्टम दिनांक फ़ील्ड देता है और एक साधारण दिनांक पिकर प्रदान करता है, मैंने इसका उपयोग स्वयं ईवेंट लिस्टिंग फ़ंक्शन के लिए किया है।
रिक कर्रान

0

WP देव Nacin एक साधारण फ़ंक्शन ओवरराइड का उपयोग करता है:

remove_action('future_post', '_future_post_hook');
add_filter( 'wp_insert_post_data', 'nacin_do_not_set_posts_to_future' );

function nacin_do_not_set_posts_to_future( $data ) {
    if ( $data['post_status'] == 'future' && $data['post_type'] == 'post' )
        $data['post_status'] = 'publish';
    return $data;
}

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