Как сохранить метаданные в бэкэнде WordPress с помощью PHP - PullRequest
0 голосов
/ 24 июня 2019

Я относительно новичок в публикации метаданных в бэкэнде WordPress с использованием PHP. Я написал код, который создает метаданные. Мне нужна помощь в сохранении данных, для которых я написал. Также необходимо разрешить мне редактировать данные после сохранения.

В данном случае это текстовое поле.

Я создал метаданные для поля ввода, которое хорошо отображается в административной области WordPress.

add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
    /* Save post meta on the 'save_post' hook. */
    add_action( 'save_post', 'cd_meta_box_add', 10, 2 );
}

function cd_meta_box_cb()  
{  
    echo "<input type='text' name='jobtitle'>";     
} 

Мне просто нужна помощь с кодом, который сохранит вышеуказанные метаданные в БД и позволит редактировать и редактировать

1 Ответ

1 голос
/ 25 июня 2019

Вы были почти там.

Последняя часть головоломки - это функция, которая сохраняет метаданные, но сначала нам нужно внести несколько изменений в существующий код:

  1. add_action( 'save_post', 'cd_meta_box_add', 10, 2 ); необходимо переместить за пределы cd_meta_box_add(), а

  2. Измените add_action( 'save_post', 'cd_meta_box_add', 10, 2 ); на add_action( 'save_post', 'cd_meta_box_add' );, так как этот хук действия получает только один параметр (идентификатор сообщения) и

  3. Вам нужно определить функцию, которая будет обрабатывать данные (и это не может быть cd_meta_box_add, как у вас сейчас, поэтому мы создадим новую с именем save_cd_meta_box_data).

/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );

function save_cd_meta_box_data( $post_id ) {

    // Autosaving, bail.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // @TODO
    // You should add some additional security checks here
    // eg. nonce, user capabilities, etc, to prevent
    // malicious users from doing bad stuff.

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['jobtitle'] ) ) {
        return;
    }

    // Sanitize user input.
    $my_data = sanitize_text_field( $_POST['jobtitle'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_job_title', $my_data );
}
  1. Теперь, когда мы успешно сохранили метаданные в базе данных, давайте разрешим пользователю просматривать их / редактировать:
function cd_meta_box_cb( $post )  
{  
    $job_title = get_post_meta( $post->ID, '_job_title', true );
    echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";     
}

Окончательный код должен выглядеть следующим образом:

/* Register and display metabox */
add_action( 'add_meta_boxes', 'cd_meta_box_add' );

function cd_meta_box_add()
{
    add_meta_box( 'my-meta-box-id', 'Job Title', 'cd_meta_box_cb', 'people', 'normal', 'high' );
}

function cd_meta_box_cb( $post )  
{  
    $job_title = get_post_meta( $post->ID, '_job_title', true );
    echo "<input type='text' name='jobtitle' value='" . esc_attr( $job_title ) . "'>";     
}

/* Save post meta on the 'save_post' hook. */
add_action( 'save_post', 'save_cd_meta_box_data' );

function save_cd_meta_box_data( $post_id ) {

    // Autosaving, bail.
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // @TODO
    // You should add some additional security checks here
    // eg. nonce, user capabilities, etc, to prevent
    // malicious users from doing bad stuff.

    /* OK, it's safe for us to save the data now. */

    // Make sure that it is set.
    if ( ! isset( $_POST['jobtitle'] ) ) {
        return;
    }

    // Sanitize user input.
    $my_data = sanitize_text_field( $_POST['jobtitle'] );

    // Update the meta field in the database.
    update_post_meta( $post_id, '_job_title', $my_data );
}
...