Как создать пользовательское поле в 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'] )
);
}
}
Однако, при редактировании страницы товара, в поле "Цена" не отображается сохраненное значение, и после сохранения оно исчезает. Где я допустил ошибку и как это исправить?
Благодарю за вашу помощь!
Ответы:
Чтобы создать и использовать пользовательское поле в 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() для экранирования значения поля, чтобы избежать возможных проблем безопасности.
Теперь при редактировании страницы товара вы должны видеть сохраненное значение в поле "Цена", и после сохранения это значение будет сохраняться и отображаться правильно.
Надеюсь, это поможет вам разобраться с созданием пользовательского поля. Если у вас возникнут еще вопросы, не стесняйтесь задавать!
Удачи!