ডাব্লুপি পোস্ট পিএইচপি ফাংশন এবং কাস্টম ক্ষেত্র sertোকান


26

ওয়ার্ডপ্রেস ফাংশনটি ডেটা অগ্রগামী হিসাবে জমা দেওয়ার জন্য ব্যবহৃত হয়। স্ট্যান্ডার্ড ক্ষেত্রগুলি বিষয়বস্তু, সংক্ষিপ্তসার, শিরোনাম, তারিখ এবং আরও অনেক কিছুর জন্য জমা দিতে।

যার জন্য কোনও ডকুমেন্টেশন নেই তা হ'ল কীভাবে কাস্টম ক্ষেত্রে জমা দিতে হয়। আমি জানি add_post_meta($post_id, $meta_key, $meta_value, $unique);ফাংশন দিয়ে এটি সম্ভব ।

তবে, কীভাবে এটি স্ট্যান্ডার্ড wp_insert_postফাংশনে অন্তর্ভুক্ত করবেন ?

<?php 
$my_post = array(
     'post_title' => $_SESSION['booking-form-title'],
     'post_date' => $_SESSION['cal_startdate'],
     'post_content' => 'This is my post.',
     'post_status' => 'publish',
     'post_type' => 'booking',
  );
  wp_insert_post( $my_post );
  ?>

উত্তর:


35

আপনি যদি ডকুমেন্টেশনগুলির জন্য পড়েন তবে wp_insert_postএটি সদ্য তৈরি পোস্টের পোস্ট আইডি প্রদান করে।

যদি আপনি এটি নীচের ফাংশনটির সাথে একত্রিত করেন __update_post_meta(একটি কাস্টম ফাংশন আমি এই সাইট থেকে অর্জন করেছি এবং কিছুটা মানিয়ে নিয়েছি)

/**
  * Updates post meta for a post. It also automatically deletes or adds the value to field_name if specified
  *
  * @access     protected
  * @param      integer     The post ID for the post we're updating
  * @param      string      The field we're updating/adding/deleting
  * @param      string      [Optional] The value to update/add for field_name. If left blank, data will be deleted.
  * @return     void
  */
public function __update_post_meta( $post_id, $field_name, $value = '' )
{
    if ( empty( $value ) OR ! $value )
    {
        delete_post_meta( $post_id, $field_name );
    }
    elseif ( ! get_post_meta( $post_id, $field_name ) )
    {
        add_post_meta( $post_id, $field_name, $value );
    }
    else
    {
        update_post_meta( $post_id, $field_name, $value );
    }
}

আপনি নিম্নলিখিত পাবেন:

$my_post = array(
    'post_title' => $_SESSION['booking-form-title'],
    'post_date' => $_SESSION['cal_startdate'],
    'post_content' => 'This is my post.',
    'post_status' => 'publish',
    'post_type' => 'booking',
);
$the_post_id = wp_insert_post( $my_post );


__update_post_meta( $the_post_id, 'my-custom-field', 'my_custom_field_value' );

অনেক ধন্যবাদ. আপনি কি আমাকে রোপন সম্পর্কে একটি ধারণা দিতে পারেন? অর্থাৎ। কোড কিন্তু যা যায়। অনেক ধন্যবাদ
রবিন আই নাইট 21

2
সুন্দরভাবে সম্পন্ন. দ্বিতীয় কোড ব্লকটি আপনার প্রতিস্থাপন করে, ফাংশন মানগুলি হ'ল কাস্টম ফিল্ড কী / মান জোড়। স্ক্রিপ্টের শীর্ষে ফাংশনটি রাখুন বা স্ক্রিপ্টের শীর্ষে অন্তর্ভুক্ত একটি পৃথক। পিএফপি ফাইল রাখুন।
এেন্ড্রু

1
একটি নোট হিসাবে, আমি ওওপি ব্যবহার করি তাই এটি public"ফাংশন" এর সামনে সংশোধক হওয়ার কারণ । আপনি যদি কোনও ক্লাসে না রেখে ফাংশনটি নিজেই অন্তর্ভুক্ত করেন তবে আপনাকে যুক্ত করার দরকার নেইpublic
জ্যাক

হ্যালো জ্যাক, আেন্ড্রু এবং ফিলিপ। সবকিছু সুন্দরভাবে কাজ করছে তবে আমি এটিকে কোনও ক্যোয়ারিতে প্রয়োগ করার চেষ্টা করেছি পাশাপাশি কোনও লাভ হয়নি। কেন আমি বেশ দেখতে পাচ্ছি না। এখানে লিঙ্কটি যেহেতু আপনারা সবাই জানেন কীভাবে প্রাথমিক কাস্টম ফিল্ডের নতুন পোস্টটি কাজ করেছিল আমি ভেবেছিলাম আপনি আমার ত্রুটি দেখতে পাচ্ছেন। ওয়ার্ডপ্রেস.স্ট্যাকেক্সেঞ্জাওয়েজ
প্রশ্নগুলি /

1
আমি ওয়ার্ডপ্রেস.স্ট্যাকেক্সচেঞ্জের খ্যাতি নেই বলে আমি কোনও উত্তর যুক্ত করতে পারি না। আজকের হিসাবে একটি নতুন পদ্ধতি রয়েছে, আপনি কেবল wp_insert_post এ একটি অ্যারে লিখতে পারেন: মেটা_ইনপুট => অ্যারে (কী => মান)
ফ্রেডেরিক উইট

13

আপনি 'wp_insert_post' এর পরে খুব সহজেই 'add_post_meta' যুক্ত করতে পারেন

<?php 
$my_post = array(
     'post_title' => $_SESSION['booking-form-title'],
     'post_date' => $_SESSION['cal_startdate'],
     'post_content' => 'This is my post.',
     'post_status' => 'publish',
     'post_type' => 'booking',
  );

$post_id = wp_insert_post($my_post);

add_post_meta($post_id, 'META-KEY-1', 'META_VALUE-1', true);
add_post_meta($post_id, 'META-KEY-2', 'META_VALUE-2', true);
?>

1

আপনি wp_insert_post ();) দিয়ে এটি ব্যবহার করতে পারবেন বলে আমি মনে করি না।

কারণটি হ'ল ডাব্লুপি কীভাবে দুটি ডাটা টাইপ সংরক্ষণ করে। এক ডজন বিভিন্ন কলাম (ডাব্লুপি_পোস্ট) সহ পোস্টগুলি এক বৃহত একতরফা টেবিলের মধ্যে সংরক্ষণ করা হয়; কাস্টম ক্ষেত্রগুলি একটি সরল, 4-কলামের সারণীতে (ডাব্লুপিপোস্টমেটা) সঞ্চিত থাকে মূলত একটি মেটা কী এবং মান সহ, যা কোনও পোস্টের সাথে যুক্ত।

ফলস্বরূপ, পোস্ট আইডি না হওয়া পর্যন্ত আপনি সত্যিকার অর্থে কাস্টম ক্ষেত্রগুলি সংরক্ষণ করতে পারবেন না।

এটা চেষ্টা কর:

function myplugin_insert_customs($pid){

    $customs = array(
    'post_id' => $pid,
    'meta_key' => 'Your meta key',
    'meta_value' => 'Your meta value',
    );

    add_post_meta($customs);

}

add_action('save_post', 'myplugin_insert_customs', 99);

এই কোডেক্স পোস্টটি সাহায্য করেছে - এটি আপনি যা করছেন তার বিপরীতে (যেমন, পোস্ট মোছার পরে কোনও ডিবি সারি মুছে ফেলা): http://codex.wordpress.org/pugug_API/ ক্রিয়াকলাপ / রেফারেন্স / ডিলিট_পোস্ট


সেক্ষেত্রে আমি দেখতে পেলাম একমাত্র উপায় হল একটি সেশন ব্যবহার করা, এটি কি সঠিক হবে।
রবিন আই নাইট

নাহ; আমি অনুমান করছি যে আপনার প্লাগইন একই সাথে একটি পোস্ট সংরক্ষণ করার পরে কাস্টম ক্ষেত্রগুলি সন্নিবেশ করানোর চেষ্টা করছে, তাই না? আমি মনে করি পোস্টটি সংরক্ষণের পরে আপনার যা করা দরকার তা হ'ল ডব্লিউপি-তে প্রবেশ করুন, পোস্টের নতুন আইডি নম্বরটি ধরুন, তারপরে যোগ_পোস্ট_মেটাতে সরবরাহ করুন (); সিএফ তৈরি করতে। আমি কিছু কোড সহ আমার উত্তরটি এক সেকেন্ডে আপডেট করব।
এন্ড্রু

সাহায্যের জন্য ধন্যবাদ. যাইহোক এটি একটি প্লাগইন নয়। আমি এটি লিখেছিলাম যাতে আমরা এটি যতটা প্রয়োজন কাস্টমাইজ করতে পারি। (তবে পিএইচপি, কেবল বিচার এবং ত্রুটির সাথে আমি কোনও ভাল) এর অর্থ গ্রহণ করবেন না
রবিন আই নাইট

এটি একটি থিম, তাহলে? কেবল আসল পার্থক্য হ'ল সেই ক্ষেত্রে আপনি এটি ফাংশন.এফপিতে রাখবেন।
এেন্ড্রু

1

save_postফিল্টার ব্যবহার করুন , তারপরে add_post_metaআপনার ফিল্টার ফাংশনে কল করুন ।


অকেজো। custom পোস্ট-> আইডি wp_insert_post_data- তে উপলব্ধ নেই, যা কাস্টম ক্ষেত্র তৈরি করার জন্য প্রয়োজনীয়।
এেন্ড্রু

@ এন্ড্রু save_postঅ্যাকশনটি ফাংশনের একেবারে শেষে, এটির পোস্টের আইডি রয়েছে এবং এতে বস্তুটি প্রেরণ করা হয়েছে, উত্তরটি দুর্দান্ত।
রাস্তার প্রথম

1
আমি নিশ্চিত যে এটি সম্পাদিত হয়েছিল, রার্স্ট। নির্বিশেষে, এটি এখন উপলব্ধি করে।
এেন্ড্রু

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