Julian29Entrepreneur 12.08.2023 02:29

Как создать пользовательское поле в WordPress?

Здравствуйте!

Я новичок в WordPress и столкнулся с проблемой создания пользовательского поля. Не могли бы вы помочь мне разобраться, как его создать и использовать?

Я хочу добавить пользовательское поле для отображения дополнительной информации на страницах моего сайта. Например, я хочу добавить поле "Цена" для каждого товара на странице товаров.

Я уже пытался использовать функцию add_post_meta(), но у меня возникли проблемы с ее применением. Вот пример кода, который я написал:


add_action( 'add_meta_boxes', 'custom_add_meta_box' );
function custom_add_meta_box() {
     add_meta_box(
         'custom_meta_box',
         'Дополнительная информация',
         'custom_meta_box_callback',
         'product',
         'normal',
         'high'
     );
}

function custom_meta_box_callback( $post ) {
     $value = get_post_meta( $post->ID, 'price', true );
     echo '';
     echo '';
}

add_action( 'save_post', 'custom_save_meta_box_data' );
function custom_save_meta_box_data( $post_id ) {
     if ( array_key_exists( 'price', $_POST ) ) {
         update_post_meta(
             $post_id,
             'price',
             sanitize_text_field( $_POST['price'] )
         );
     }
}

Однако, при редактировании страницы товара, в поле "Цена" не отображается сохраненное значение, и после сохранения оно исчезает. Где я допустил ошибку и как это исправить?

Благодарю за вашу помощь!

Ответы:

renatkozlov1991 12.08.2023 02:37

Чтобы создать и использовать пользовательское поле в WordPress, вы можете использовать функции add_meta_box() и update_post_meta(). В вашем коде вы уже используете эти функции, но допустили несколько ошибок, которые приводят к неправильному отображению и сохранению значения пользовательского поля.

Вот исправленный код:


add_action( 'add_meta_boxes', 'custom_add_meta_box' );
function custom_add_meta_box() {
     add_meta_box(
         'custom_meta_box',
         'Дополнительная информация',
         'custom_meta_box_callback',
         'product',
         'normal',
         'high'
     );
}

function custom_meta_box_callback( $post ) {
     // Получаем сохраненное значение поля 'price'
     $value = get_post_meta( $post->ID, 'price', true );
     // Выводим метку и поле ввода
     echo '<label for="price">Цена: </label>';
     echo '<input type="text" id="price" name="price" value="' . esc_attr( $value ) . '" />';
}

add_action( 'save_post', 'custom_save_meta_box_data' );
function custom_save_meta_box_data( $post_id ) {
     if ( array_key_exists( 'price', $_POST ) ) {
         // Обновляем значение поля 'price' при сохранении поста
         update_post_meta(
             $post_id,
             'price',
             sanitize_text_field( $_POST['price'] )
         );
     }
}

В этой версии кода мы добавили поле ввода с идентификатором "price" и именем "price" в функции custom_meta_box_callback(). Мы также использовали функцию esc_attr() для экранирования значения поля, чтобы избежать возможных проблем безопасности.

Теперь при редактировании страницы товара вы должны видеть сохраненное значение в поле "Цена", и после сохранения это значение будет сохраняться и отображаться правильно.

Надеюсь, это поможет вам разобраться с созданием пользовательского поля. Если у вас возникнут еще вопросы, не стесняйтесь задавать!

Удачи!


Добавить ответ