पोस्ट के शीर्षक को बदलने के लिए save_post का उपयोग करना


16

मैं कस्टम पोस्ट का उपयोग कर रहा हूं, और इनमें, मुझे शीर्षक की आवश्यकता नहीं है।

यह Wordpress को मेरे पोस्ट के शीर्षक "ऑटो ड्राफ्ट" पर सेट करने का कारण बनता है।

मैं अपनी पोस्ट में अन्य फ़ील्ड्स से गणना की गई शीर्षक का मान कुछ और में बदलना चाहूंगा।

मैं कैसे कर के बारे में जाने कि save_post या कुछ अन्य साधनों का उपयोग?


कृपया अपने register_post_type()कॉल को शामिल करने के लिए अपने प्रश्न को संपादित करें।
चिप बेनेट

आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? आप अपने CPT के लिए पोस्ट शीर्षक बिल्कुल नहीं चाहते हैं या आप चाहते हैं कि इसे कस्टम फ़ील्ड मान से सेट किया जाए?
रुटविक गांगुर्दे

1
मैं यह बिल्कुल नहीं चाहता, लेकिन पोस्ट सूची में मैं इसे हटा नहीं सकता क्योंकि मैं अब पोस्टों को संपादित नहीं कर पाऊंगा। इसका मतलब यह है कि मुझे इसके बदले किसी तरह का "नकली" शीर्षक रखने का एक तरीका चाहिए।
त्सही लेवेंट-लेवी

1
तो, आप वास्तव में क्या करना चाहते हैं अपने कस्टम पोस्ट प्रकार के लिए विभिन्न स्तंभों को आउटपुट करने के लिए, पोस्ट स्क्रीन को संशोधित करना है? यदि हां, तो यह पूछने के लिए अधिक लाभदायक प्रश्न हो सकता है। :)
चिप बेनेट

यह एक हिस्सा है। एक व्यक्ति इस तरह के "प्रभाव" सवाल पूछता है क्योंकि वह एक परियोजना के कई पहलुओं को orginize करने में उसकी मदद करने के लिए जवाब चाहता है। खोज,
टेम्प्लेटिंग

जवाबों:


16

यह सबसे सरल तरीका डेटा को उस बिंदु पर संपादित करना होगा, जो wp_insert_post_dataइसके बजाय इसे अपडेट करने के बजाय , इसके बजाय का उपयोग करके save_post। यह एक नया पोस्ट बनाने या मौजूदा पोस्ट को बिना किसी बदलाव के अपडेट करने पर काम करता है। यह update_postभीतर ट्रिगर करके एक अनंत लूप बनाने के खतरे से भी बचता है save_post

add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 ); // Grabs the inserted post data so you can modify it.

function modify_post_title( $data )
{
  if($data['post_type'] == 'rating' && isset($_POST['rating_date'])) { // If the actual field name of the rating date is different, you'll have to update this.
    $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
    $title = 'TV ratings for ' . $date;
    $data['post_title'] =  $title ; //Updates the post title to your new title.
  }
  return $data; // Returns the modified data.
}

10

मुझे ठीक उसी तरह की आवश्यकता थी, इसलिए मैंने इस फ़ंक्शन को लिखा - जो काम करता है। इसे अपनी आवश्यकताओं के लिए संशोधित करें। उम्मीद है की यह मदद करेगा।

// set daily rating title
function set_rating_title ($post_id) {
    if ( $post_id == null || empty($_POST) )
        return;

    if ( !isset( $_POST['post_type'] ) || $_POST['post_type']!='rating' )  
        return; 

    if ( wp_is_post_revision( $post_id ) )
        $post_id = wp_is_post_revision( $post_id );

    global $post;  
    if ( empty( $post ) )
        $post = get_post($post_id);

    if ($_POST['rating_date']!='') {
        global $wpdb;
        $date = date('l, d.m.Y', strtotime($_POST['rating_date']));
        $title = 'TV ratings for ' . $date;
        $where = array( 'ID' => $post_id );
        $wpdb->update( $wpdb->posts, array( 'post_title' => $title ), $where );
    }
}
add_action('save_post', 'set_rating_title', 12 );

2

फ़िल्टर default_title आज़माएं :

add_filter( 'default_title', 'my_default_title', 10, 2 );

function my_default_title( $post_title, $post ){

  $custom_post_type = 'my_awesome_cpt';

  // do it only on your custom post type(s)
  if( $post->post_type !== $custom_post_type )
    return $post_title;

  // create your preferred title here
  $post_title = $custom_post_type . date( 'Y-m-d :: H:i:s', time() );

  return $post_title;
}

1
यह समाधान अनुरोध के रूप में "मेरे क्षेत्र में अन्य क्षेत्रों से गणना" शीर्षक बनाने की अनुमति नहीं देता है। यह ठीक है, यदि आप उस तरह के सभी पदों के लिए एक स्वचालित शीर्षक उत्पन्न कर सकते हैं। लेकिन अगर आपको कुछ डायनामिक वैरिएबल पर निर्भर रहने की जरूरत है तो यह मदद नहीं करेगा।
बिरनीत गोरेन

1
@ बिरनीत गोरेन "मेरी पोस्ट के अन्य क्षेत्रों से गणना" का क्या मतलब है? आपने कौन सी फील्ड में संग्रहीत पोस्ट ऑब्जेक्ट को याद किया $post? कृपया प्रारंभिक प्रश्न और नीचे टिप्पणी पढ़ें। एक स्वचालित जनरेटेड टाइटल का अनुरोध नहीं किया जाता है। केवल एक नकली पोस्ट शीर्षक (वर्डप्रेस "ऑटो ड्राफ्ट" के लिए एक प्रतिस्थापन) की आवश्यकता है।
Ralf912

2

यहां एक समाधान है जो अनंत लूप को रोकने के लिए एक स्थिर चर का उपयोग करता है। यह आपको wp_update_post()एक फ़ंक्शन के अंदर सुरक्षित रूप से कॉल करने की अनुमति देता है जो कि हुक है save_post

function km_set_title_on_save( $post_id ) {

    // Set this variable to false initially.
    static $updated = false;

    // If title has already been set once, bail.
    if ( $updated ) {
        return;
    }

    // Since we're updating this post's title, set this
    // variable to true to ensure it doesn't happen again.
    $updated = true;

    $date           = get_post_meta( $post_id, 'rating_date', true );
    $date_formatted = date( 'l, d.m.Y', strtotime( $date ) );

    // Update the post's title.
    wp_update_post( [
        'ID'         => $post_id,
        'post_title' => 'TV ratings for ' . $date_formatted,
    ] );
}
add_action( 'save_post', 'km_set_title_on_save' );

नोट: इस कार्यक्षमता को एक निश्चित पोस्ट प्रकार तक सीमित करने के लिए, save_post के बजाय save_post _ {$ post-> post_type} हुक का उपयोग करें।

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