Добавляем произвольные поля (Custom fields) в пользовательские типы сообщений
Заметки по Wordpress

Добавляем произвольные поля (Custom fields) в пользовательские типы сообщений

Продолжая серию постов «Пользовательские типы» мы дошли до создания произвольных полей.

Что такое Custom Fields (произвольные поля) в WordPress?

С помощью произвольных полей (Custom fields) можно сделать сайт любой сложности. Можно сделать в шаблоне все красиво и аккуратно.

Произвольные поля (Custom fields) позволят добавлять к постам разные записи. Произвольное поле состоит из имени (оно является постоянной величиной) и значения (которое изменяется и назначается пользователем произвольно в каждой записи).

Добавляем произвольные поля (Custom fields) в пользовательские типы сообщений

Часть 3:  Произвольные поля.

Начнем с добавления добавления функций  в файл темы functions.php:

1. Создадим новый мета блок для постов или пользовательских типов постов (записей типа post или Custom Post Type) с названием “Дополнительные поля”:

add_action("admin_init", "my_fields", 1);
function my_fields() {
add_meta_box( "extra_fields", "Дополнительные поля", "fields_box", "My_type_post", "normal", "high" );
}

 

  • my_fields – любое название.
  • My_type_post – это куда будем добавлять наши поля. post – стандартные записи, custom post type – пользовательский тип постов.

2. Далее в этот блоке выводим поля html формы, делается это через, указанную в add_meta_box() функцию fields_box() :

function fields_box(){
global $post;
$custom = get_post_custom($post->ID);
$price = $custom["price"][0];
 ?> 
руб.

<?php
}

Здесь я рассматриваю 1 тип поля текстовый, но добавлять можно естественно и другие типы. Здесь можно глянуть и другие типы полей.

 3. Нам надо обрабатывать и сохранять эти поля, для этого вставляем код:

add_action('save_post', 'save_price', 0);
function save_price( $post_id ){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false; // выходим если это автосохранение
if ( !current_user_can('edit_post', $post_id) ) return false; // выходим если юзер не имеет право редактировать запись
global $post;
update_post_meta($post->ID, "price", $_POST["price"]);
}

С правкой файла functions.php покончили. Весь код целиком:

add_action("admin_init", "my_fields", 1);
function my_fields() {
add_meta_box( "extra_fields", "Дополнительные поля", "fields_box", "My_type_post", "normal", "high" );
}
function fields_box(){
global $post;
$custom = get_post_custom($post->ID);
$price = $custom["price"][0];
?>

руб.
<?php
}
add_action('save_post', 'save_price', 0);
function save_price( $post_id ){
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false; // выходим если это автосохранение
if ( !current_user_can('edit_post', $post_id) ) return false; // выходим если юзер не имеет право редактировать запись
global $post;
update_post_meta($post->ID, "price", $_POST["price"]);
}

4. Теперь наше поле  надо вывести в шаблоне нашего поста, в нужном месте Вашего шаблона  вставляем код:

Цена: <?php echo (get_post_meta($post->ID, 'price', true)); ?>

Это самый простой вывод этого поля, можно сделать так же  значение по умолчанию, если поле оставили пустым.
Примеры продвинутого использования Custom fields

P.S.В следующий посте рассмотрим поиск по Custom fields.