পোস্টের শিরোনাম প্রতিস্থাপন করতে save_post ব্যবহার করা হচ্ছে


16

আমি কাস্টম পোস্ট ব্যবহার করছি এবং এগুলিতে আমার শিরোনামের প্রয়োজন নেই।

এটি ওয়ার্ডপ্রেসের কারণে আমার পোস্টগুলির শিরোনাম "অটো ড্রাফ্ট" এ সেট করে।

আমি আমার পোস্টের অন্যান্য ক্ষেত্রগুলি থেকে গুণিত শিরোনামের মানটি অন্য কোনওটিতে পরিবর্তন করতে চাই।

Save_post বা অন্য কোনও উপায়ে ব্যবহার করে আমি কীভাবে তা করতে যাব?


আপনার register_post_type()কল অন্তর্ভুক্ত করতে দয়া করে আপনার প্রশ্নটি সম্পাদনা করুন ।
চিপ বেনেট

আপনি ঠিক কী অর্জন করার চেষ্টা করছেন? আপনি আপনার সিপিটির জন্য কোনও পোস্টের শিরোনাম চান না বা আপনি এটি একটি কাস্টম ফিল্ড মান থেকে সেট করা চান?
রতউইক গাঙ্গুরদে

1
আমি এটি মোটেও চাই না, তবে পোস্টের তালিকায় আমি এটিকে সরাতে পারছি না কারণ আমি আর পোস্টগুলি সম্পাদনা করতে সক্ষম হব না। এর অর্থ হল এর পরিবর্তে কোনও ধরণের একটি "জাল" শিরোনাম স্থাপনের জন্য আমার একটি উপায় প্রয়োজন।
সোশি লেভেন্ট-লেভি

1
সুতরাং, আপনি সত্যিই কি করতে চান আপনার কাস্টম পোস্ট টাইপ জন্য পরিচালনা পোস্ট পর্দা আউটপুট বিভিন্ন কলামকে পরিবর্তন করতে হয়? যদি তা হয়, তবে এটি জিজ্ঞাসা করা আরও উপকারী প্রশ্ন হতে পারে। :)
চিপ বেনেট

এটি একটি অংশ jsut। কেউ এই ধরণের "প্রভাব" প্রশ্ন জিজ্ঞাসা করে কারণ তিনি কোনও প্রকল্পের বিভিন্ন দিককে সূচিত করতে সহায়তা করার জন্য উত্তর চান। অনুসন্ধান,
টেম্প্লেটিং

উত্তর:


16

এই সহজ পদ্ধতিটি হ'ল inোকানো বিন্দুতে ডেটাটি সম্পাদনা করা, পরিবর্তে পরিবর্তে এটি আপডেট করার 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

ডিফল্ট ফিল্টার চেষ্টা করুন :

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? প্রাথমিক প্রশ্ন এবং নীচের মন্তব্যগুলি পড়ুন। একটি স্বয়ংক্রিয় উত্পন্ন পোস্ট titel হয় না অনুরোধ করা হয়েছে। শুধুমাত্র একটি জাল পোস্ট শিরোনাম (ওয়ার্ডপ্রেস "অটো ড্রাফ্ট" এর প্রতিস্থাপন) প্রয়োজন।
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 } হুক ব্যবহার করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.