it-swarm.com.de

WP Beitrag einfügen PHP Funktion und benutzerdefinierte Felder

Die WordPress-Funktion wird zum programmgesteuerten Senden von Daten verwendet. Standardfelder, die eingereicht werden müssen, um den Inhalt, den Auszug, den Titel, das Datum und vieles mehr aufzunehmen.

Es gibt keine Dokumentation dafür, wie ein benutzerdefiniertes Feld eingereicht wird. Ich weiß, dass es mit der Funktion add_post_meta($post_id, $meta_key, $meta_value, $unique); möglich ist.

Aber wie kann man das in die wp_insert_post Standardfunktion einbinden?

<?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 );
  ?>
26
Robin I Knight

Wenn Sie die Dokumentation zu wp_insert_post lesen, wird die Beitrags-ID des soeben erstellten Beitrags zurückgegeben.

Wenn Sie dies mit der folgenden Funktion kombinieren, __update_post_meta (eine benutzerdefinierte Funktion, die ich von dieser Site erworben und ein wenig angepasst habe)

/**
  * 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 );
    }
}

Sie erhalten Folgendes:

$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' );
35
Zack

Sie können einfach das 'add_post_meta' nach dem 'wp_insert_post' hinzufügen

<?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);
?>
13
Philip

Verwenden Sie save_post filter und rufen Sie dann add_post_meta in Ihrer Filterfunktion auf.

1
Micah Ernst

Ich glaube nicht, dass Sie es mit wp_insert_post () verwenden können.

Der Grund dafür ist, wie WP die beiden Datentypen speichert. Posts werden in einer großen monolithischen Tabelle mit einem Dutzend verschiedener Spalten (wp_posts) gespeichert. Benutzerdefinierte Felder werden in einer einfacheren Tabelle mit vier Spalten (wp_postmeta) gespeichert, die hauptsächlich aus einem Metaschlüssel und einem Wert besteht, die einem Beitrag zugeordnet sind.

Folglich können Sie benutzerdefinierte Felder erst dann wirklich speichern, wenn Sie die Beitrags-ID haben.

Versuche dies:

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

Dieser Codex-Beitrag hat geholfen - es ist ein bisschen das Gegenteil von dem, was Sie tun (d. H. Löschen einer DB-Zeile nach dem Löschen): http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post

1
aendrew