WP पोस्ट PHP फ़ंक्शन और कस्टम फ़ील्ड सम्मिलित करें


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

बहुत बहुत धन्यवाद। क्या आप संभवतः मुझे आरोपण पर एक विचार दे सकते हैं। अर्थात। जो लेकिन कोड कहां जाता है। बहुत धन्यवाद
रॉबिन I नाइट

2
अच्छी तरह से किया। दूसरा कोड ब्लॉक आपकी जगह लेता है, फ़ंक्शन मान कस्टम फ़ील्ड कुंजी / मान युग्म है। फ़ंक्शन को स्क्रिप्ट के शीर्ष पर, या स्क्रिप्ट के शीर्ष पर शामिल एक अलग .php फ़ाइल में रखें।
aendrew

1
एक नोट के रूप में, मैं OOP का उपयोग करता हूं ताकि public"फ़ंक्शन" के सामने संशोधक का कारण हो । आप समारोह अपने आप में यह एक वर्ग में डाले बिना शामिल कर रहे हैं, तो आप को जोड़ने की जरूरत नहीं हैpublic
जैक

हैलो ज़ैक, Aendrew और फिलिप। सब कुछ खूबसूरती से काम कर रहा है लेकिन मैंने इसे एक क्वेरी के साथ-साथ बिना किसी लाभ के लागू करने की कोशिश की। मैं काफी क्यों नहीं देख रहा हूँ। यहाँ लिंक है क्योंकि आप सभी जानते हैं कि आरंभिक कस्टम फ़ील्ड नई पोस्ट कैसे काम करती है मैंने सोचा कि आप मेरी त्रुटि देख सकते हैं। wordpress.stackexchange.com/questions/8622/…
रॉबिन I नाइट

1
मैं एक जवाब नहीं जोड़ सकता, क्योंकि मेरे पास wordpress.stackexchange पर प्रतिष्ठा नहीं है। आज के रूप में एक नई विधि है, आप बस एक सरणी में wp_insert_post में डाल सकते हैं जैसे: meta_input => array (key => value)
फ्रेडरिक विट्टे

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 (); के साथ उपयोग कर सकते हैं;

इसका कारण यह है कि WP दो डेटा प्रकारों को कैसे संग्रहीत करता है। एक दर्जन विभिन्न स्तंभों (wp_posts) के साथ एक बड़ी अखंड तालिका में पोस्ट संग्रहीत किए जाते हैं; कस्टम फ़ील्ड को एक सरल, 4-कॉलम तालिका (wp_postmeta) में संग्रहीत किया जाता है, जिसमें मुख्य रूप से एक मेटा कुंजी और मूल्य शामिल होता है, जो एक पोस्ट से जुड़ा होता है।

नतीजतन, आप कस्टम फ़ील्ड को तब तक स्टोर नहीं कर सकते जब तक आपके पास पोस्ट आईडी नहीं है।

इसे इस्तेमाल करे:

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

इस कोडेक्स पोस्ट ने मदद की - यह आपके द्वारा किए जा रहे काम के विपरीत है (यानी, पोस्ट डिलीट करने पर DB पंक्ति हटा देना): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post


उस मामले में एक ही तरीका है जो मैं देख सकता हूं कि एक सत्र का उपयोग करना है, क्या यह सही होगा।
रॉबिन I नाइट

नाह; मुझे लगता है कि आपका प्लगइन कस्टम फ़ील्ड सम्मिलित करने का प्रयास कर रहा है उसी समय एक पोस्ट सहेजा गया है, है ना? मुझे लगता है कि पोस्ट को सहेजने के बाद आपको WP में हुक करने की आवश्यकता है, पोस्ट के नए आईडी नंबर को पकड़ो, फिर उसे add_post_meta () में आपूर्ति करें; सीएफ बनाने के लिए। मैं कुछ कोड के साथ एक सेकंड में अपना जवाब अपडेट करूंगा।
aendrew

सहायता के लिए धन्यवाद। वैसे इसके प्लगइन नहीं है। मैंने इसे लिखा था इसलिए हम इसे आवश्यकतानुसार अनुकूलित कर सकते हैं। (लेकिन इसका मतलब यह नहीं है कि मैं php, बस परीक्षण और त्रुटि के साथ अच्छा हूँ)
रॉबिन I नाइट

यह एक विषय है, तो? केवल वास्तविक अंतर आप उस कार्य में डालेंगे।
21

1

save_postफ़िल्टर का उपयोग करें , फिर add_post_metaअपने फ़िल्टर फ़ंक्शन में कॉल करें ।


सहायक नहीं। $ पोस्ट-> आईडी wp_insert_post_data के लिए उपलब्ध नहीं है, जो कस्टम फ़ील्ड बनाने के लिए आवश्यक है।
aendrew

@aendrew save_postक्रिया फ़ंक्शन के बहुत अंत में है, इसमें पोस्ट की आईडी और इसके पास दी गई वस्तु है, उत्तर ध्वनि है।
रार्स्ट

1
मुझे पूरा यकीन है कि यह Rarst संपादित किया गया था। बावजूद इसके अब समझ में आता है।
aendrew

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