Заметки по Wordpress

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

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

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

С помощью произвольных полей (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.

Новые посты

Пользовательская таксономия (Custom Taxonomy)

Гордеев Игорь

Реклама между постами

Гордеев Игорь

Создаем уникальный Sidebar для каждой категории в WordPress

16 комментариев

Sam 26.04.2012 / 15:37

Приведенный Вами код выдает синтаксическую ошибку.

Ответить
Гордеев Игорь 26.04.2012 / 17:45

Код слетел, после обновления плагина. Все исправил проверяйте.

Ответить
Александр 11.10.2012 / 13:14

Нет…я всё равно разберусь с этими произвольными полями, потому что они очень мне нужны. Придётся перепробовать разные шаблоны, т.к. на раскодированной Академии просто слетает сайт после добавления какого-либо кода.

Ответить
Наталья 01.12.2012 / 01:55

Игорь, а у вас перед заголоком
Часть 3: Произвольные поля.

какое то место пустое – там пример был или просто так? Я даже сходила по ссылке под постом, где примеры, но не разобралась что и для чего это. и автор на комменты пользователей ТАм давно не отвечает…
А сайт очень познавательный у Вас, даже если что то пока мне не подходит, то заставляет работать в направлении, чтобы все получилось со временем. Кое-что уже работает благодаря вашим постам. Спасибо!

Ответить
Гордеев Игорь 01.12.2012 / 14:53

Пустое место это просто.

Как пример может посмотреть данную страницу Шапка «Мишка Тедди». Там использовались произвольные поля: Размеры, Срок изготовления, Цена

Ответить
Наталья 01.12.2012 / 19:26

а у меня очень узкие 2 сайдбара. Мне бы их расширить как то, тем более что немного места по бокам есть – сантиметра по 2 – как раз бы их занять что-то передвинуть. Это с помощью “произвольных полей” можно сделать? Только не на одной странице а по всему блогу?

Ответить
Гордеев Игорь 01.12.2012 / 20:42

Уважаемая, Наталья.
Изначально, сайт был ориентирован на более подкованную в WP аудиторию, теперь сайт разросся, и аудитория у него разнообразная. Поэтому пост я немного обновил, где добавил информацию о том, что же такое “произвольные поля”.
сайдбар расширяется с помощью Css, а не произвольных полей.

Ответить
Наталья 03.12.2012 / 22:23

Спасибо, но пока не совсем понятно конечно. В CSS лазила насчет расширения сайдбаров, пыталась их раздвинуть но только сместила все содержимое вниз под контент. Не разобралась вообщем в каком месте их двигать или не только CSS надо трогать?

Ответить
Наталья 27.02.2013 / 10:14

Меня научили как на 2 сайдбара ставить то что мне нужно не трогая CSS 🙂 вообще просто надо была знать КУДА вставлять )))

Ответить
Роман 04.06.2013 / 20:42

Супер!! Спасибо за статью. То что надо! Только у вас нашел подобную статью, остальные ссылки ведут на плагины. Вы мне реально помогли!
Правда сначала сайт полетел) из-за того, что в первом коде косая черта лишняя.
Ну, и если ваша аудитория не только продвинутые пользователи, советую добавить все-таки значение по умолчанию и проверку на наличие этих полей.

Ответить
Роман 04.06.2013 / 22:07

И еще… После сохранения поста, дополнительные поля появляются и в блоке “Произвольные поля”
Как правильно переделать?

Ответить
Гордеев Игорь 04.06.2013 / 22:16

Так вроде и должно, по другому никак.

Ответить
Роман 05.06.2013 / 03:44

Ну почему же нельзя. В пхп нет невозможного)
Можно, например, проверять, если поля уже созданы, то этот блок уже не показывать, и в дальнейшем редактировать в стандартном блоке “Произвольные поля”. Зачем эти поля повторяются два раза, тем более, если у меня их десять?! Только занимают полэкрана.

Ответить
Гордеев Игорь 05.06.2013 / 11:24

А не так понял вас. Я вообще отключил стандартный блок “Произвольные поля”. Я считаю он реализован как-то неудачно и неудобно. Я создаю свой блок с нужными мне полями.

Ответить
Роман 05.06.2013 / 13:26

аа.. хороший вариант. Мне тоже нравится больше самодельный блок, более компактный и удобный. Надо будет так и сделать. Спасибо за идею!

Ответить
Роман 05.06.2013 / 05:58

Решение нашлось, как я и предполагал оно в доп. поле:

<input type="hidden" name="links_fields_nonce" value="" />

которое потом при сохранении проверяется

if ( !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false;

Ну и при выводе постов проверяю

Ответить

Оставить комментарий