WP แทรกฟังก์ชั่นโพสต์ PHP และฟิลด์ที่กำหนดเอง


26

ฟังก์ชั่น WordPress ใช้สำหรับส่งข้อมูลแบบเป็นโปรแกรม ฟิลด์มาตรฐานที่จะส่งเพื่อให้มีเนื้อหาข้อความที่ตัดตอนมาชื่อวันที่และอื่น ๆ อีกมากมาย

สิ่งที่ไม่มีเอกสารประกอบสำหรับวิธีการส่งไปยังฟิลด์ที่กำหนดเอง ฉันรู้ว่ามันเป็นไปได้ด้วย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' );

ขอบคุณมาก ๆ. คุณช่วยบอกแนวคิดการปลูกฝังให้ฉันได้ไหม IE อันไหนของรหัสไปไหน ขอบคุณมาก
Robin I Knight

2
ทำได้ดีมาก บล็อกโค้ดที่สองจะแทนที่ของคุณค่าฟังก์ชันคือคู่ของคีย์ / ค่าฟิลด์ที่กำหนดเอง วางฟังก์ชั่นที่ด้านบนของสคริปต์หรือในไฟล์. php แยกต่างหากที่รวมอยู่ที่ด้านบนของสคริปต์
aendrew

1
ในฐานะที่เป็นโน้ตฉันใช้ OOP ดังนั้นนี่คือเหตุผลที่publicตัวดัดแปลงด้านหน้า "ฟังก์ชั่น" หากคุณรวมฟังก์ชั่นของตัวเองโดยไม่ต้องใส่ลงในคลาสคุณไม่จำเป็นต้องเพิ่มpublic
แซค

สวัสดีแซคแอนดรูว์และฟิลิป ทุกอย่างทำงานได้อย่างสวยงาม แต่ฉันพยายามที่จะนำไปใช้กับแบบสอบถามและไม่มีประโยชน์ ฉันไม่ค่อยเห็นว่าทำไม นี่คือลิงค์เนื่องจากคุณทุกคนรู้ว่าฟิลด์ที่กำหนดเองเริ่มต้นโพสต์ใหม่ทำงานอย่างไรฉันคิดว่าคุณอาจเห็นข้อผิดพลาดของฉัน wordpress.stackexchange.com/questions/8622/…
Robin I Knight

1
ฉันไม่สามารถเพิ่มคำตอบได้เนื่องจากฉันไม่มีชื่อเสียงใน wordpress.stackexchange ณ วันนี้มีวิธีการใหม่คุณสามารถใส่อาร์เรย์ลงใน wp_insert_post เป็น: meta_input => array (key => value)
Frederik Witte

13

คุณสามารถเพิ่ม 'add_post_meta' หลัง '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',
  );

$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 ();

เหตุผลก็เพราะ WP เก็บข้อมูลทั้งสองประเภทอย่างไร โพสต์จะถูกเก็บไว้ในตารางเสาหินขนาดใหญ่ที่มีคอลัมน์แตกต่างกันหลายสิบรายการ (wp_posts); ฟิลด์ที่กำหนดเองจะถูกเก็บไว้ในตาราง 4 คอลัมน์ที่ง่ายขึ้น (wp_postmeta) ซึ่งประกอบด้วยเมตาคีย์และค่าส่วนใหญ่ที่เกี่ยวข้องกับการโพสต์

ดังนั้นคุณไม่สามารถจัดเก็บฟิลด์ที่กำหนดเองได้จริงๆจนกว่าคุณจะมี ID โพสต์

ลองสิ่งนี้:

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);

โพสต์ codex นี้ช่วย - มันเป็นสิ่งที่ตรงกันข้ามกับสิ่งที่คุณทำ (เช่นการลบแถว DB เมื่อลบโพสต์): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post


ในกรณีนั้นทางออกเดียวที่ฉันเห็นคือใช้เซสชันนั่นจะถูกต้อง
Robin I Knight

Nah; ฉันคาดเดาว่าปลั๊กอินของคุณกำลังพยายามแทรกเขตข้อมูลที่กำหนดเองในเวลาเดียวกันการบันทึกโพสต์ใช่ไหม? ฉันคิดว่าสิ่งที่คุณต้องทำคือเชื่อมต่อ WP หลังจากโพสต์ได้รับการบันทึกคว้าหมายเลข ID ใหม่ของโพสต์จากนั้นระบุว่า add_post_meta (); เพื่อสร้าง CF ฉันจะอัปเดตคำตอบของฉันภายในไม่กี่วินาทีด้วยรหัสบางส่วน
aendrew

ขอบคุณสำหรับความช่วยเหลือ โดยวิธีการมันไม่ได้เป็นปลั๊กอิน ฉันเขียนมันเพื่อให้เราสามารถปรับแต่งได้ตามต้องการ (แต่อย่าคิดว่าฉันเก่งเรื่อง php แค่ลองผิดลองถูก)
Robin I Knight

มันเป็นเรื่องของเรื่อง เฉพาะความแตกต่างที่แท้จริงคือคุณจะใส่มันลงใน functions.php ในกรณีนั้น
aendrew

1

ใช้save_postตัวกรองจากนั้นเรียกadd_post_metaใช้ฟังก์ชันตัวกรองของคุณ


ไม่ช่วยเหลือ $ post-> ID ไม่สามารถใช้ได้กับ wp_insert_post_data ซึ่งจำเป็นสำหรับการสร้างฟิลด์ที่กำหนดเอง
aendrew

save_postการกระทำ@aendrew อยู่ที่ส่วนท้ายสุดของฟังก์ชั่น แต่ก็มี ID ของโพสต์และวัตถุถูกส่งไปยังมันคำตอบคือเสียง
Rarst

1
ฉันค่อนข้างแน่ใจว่านี่ถูกแก้ไขแล้ว Rarst โดยไม่คำนึงว่ามันสมเหตุสมผลแล้ว
aendrew

@aendrew ah, ขอโทษ - ไม่ได้สังเกตว่า
Rarst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.