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방금 만든 게시물의 게시물 ID를 반환합니다.

이 기능을 다음 기능과 결합하면 __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"function"앞에 있는 수정자가 필요한 이유입니다 . 클래스에 넣지 않고 함수 자체를 포함하는 경우 추가 할 필요가 없습니다.public
Zack

안녕하세요 잭, Aendrew 및 필립. 모든 것이 아름답게 작동하지만 쿼리에 적용하려고했지만 아무 소용이 없습니다. 왜 그런지 모르겠습니다. 다음은 링크가 있습니다. 모두 새로운 사용자 정의 필드 새 게시물의 작동 방식을 알고 있으므로 내 오류가 표시 될 것으로 생각했습니다. wordpress.stackexchange.com/questions/8622/…
Robin I Knight

1
wordpress.stackexchange에 대한 명성이 없으므로 답변을 추가 할 수 없습니다. 오늘부터 새로운 방법이 있습니다. meta_input => array (key => value)
Frederik Witte

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가 두 가지 데이터 유형을 저장하는 방법 때문입니다. 게시물은 12 개의 다른 열 (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);

이 코덱스 포스트가 도움이되었습니다-그것은 당신이하는 것과 반대입니다 (즉, 포스트 삭제시 DB 행 삭제) : http://codex.wordpress.org/Plugin_API/Action_Reference/delete_post


이 경우 세션을 사용하는 것이 유일한 방법입니다.
Robin I Knight

아냐; 귀하의 플러그인이 게시물이 저장되는 동시에 사용자 정의 필드를 삽입하려고하는 것 같습니다. 게시물이 저장된 후 WP에 연결하고 게시물의 새 ID 번호를 얻은 다음 add_post_meta (); CF를 생성합니다. 몇 가지 코드를 사용하여 잠시 후 답변을 업데이트하겠습니다.
aendrew

도와 주셔서 감사합니다. 그건 그렇고 플러그인이 아닙니다. 필요한만큼 사용자 정의 할 수 있도록 작성했습니다. (그러나 그렇게하지 않는 것은 내가 PHP로 좋은 단지 시행 착오있어 의미합니다)
로빈 I 나이트

그렇다면 테마입니까? 이 경우 functions.php에 넣는 것이 유일한 차이점입니다.
aendrew

1

사용 save_post필터를 다음 호출 add_post_meta필터 기능에.


도움이되지 않는. wp_insert_post_data에는 $ post-> ID를 사용할 수 없으며 이는 사용자 정의 필드를 작성하는 데 필요합니다.
aendrew

@aendrew save_post액션은 함수의 맨 끝에 있으며 게시물의 ID와 객체가 전달되었으며 응답은 소리입니다.
Rarst

1
Rarst, 이것이 편집되었다고 확신합니다. 어쨌든 지금은 의미가 있습니다.
11시

@aendrew 아, 죄송합니다-눈치 채지 못했습니다
Rarst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.