WP insere a função pós-PHP e os campos personalizados

23

A função WordPress é usada para enviar dados de forma programática. Campos padrão para enviar para incluir o conteúdo, trecho, título, data e muito mais.

O que não há documentação é como enviar para um campo personalizado. Eu sei que é possível com a função add_post_meta($post_id, $meta_key, $meta_value, $unique); .

Mas, como incluir isso na função wp_insert_post padrão?

<?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 );
  ?>
    
por Robin I Knight 04.02.2011 / 21:10
fonte

4 respostas

33

Se você ler a documentação de wp_insert_post , ela retornará o ID da postagem que você acabou de criar.

Se você combinar isso com a seguinte função __update_post_meta (uma função personalizada que eu adquiri deste site e adaptei um pouco)

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

Você receberá o seguinte:

$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' );
    
por Zack 04.02.2011 / 22:01
fonte
12

Você pode adicionar o 'add_post_meta' depois do '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);
?>
    
por Philip 05.02.2011 / 09:58
fonte
1

Eu não acho que você possa usá-lo com wp_insert_post () ;.

O motivo é por causa de como o WP armazena os dois tipos de dados. As postagens são armazenadas em uma grande tabela monolítica com uma dúzia de colunas diferentes (wp_posts); campos personalizados são armazenados em uma tabela mais simples, de 4 colunas (wp_postmeta), composta principalmente por uma meta-chave e valor, associados a uma postagem.

Consequentemente, você não pode realmente armazenar campos personalizados até ter o ID do post.

Tente isto:

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

Esta postagem do códice ajudou - é o oposto do que você está fazendo (isto é, excluir uma linha do banco de dados após a exclusão): enlace

    
por aendrew 04.02.2011 / 21:31
fonte
1

Use o filtro save_post e, em seguida, chame add_post_meta em sua função de filtro.

    
por Micah Ernst 04.02.2011 / 21:30
fonte