Добавить дополнительные поле, список, чекбокс или радиокнопку в статью и админку WordPress

Добавить дополнительные поле, список, чекбокс или радиокнопку в статью и админку WordPress

Очень мощная и полезная статья для разработчиков Wordpress, которым необходимо встроить прямо в редактор статьи движка дополнительные поля, списки или радиокнопки. Например. для музыкальных сайтов часто требуются поля Название альбома, оценка, год выпуска и т.д. - все это можно заполнить сначала в админке, а потом автоматом выводить в шаблоне.

За основу этой статьи я взял материал с этого сайта - авторские права соблюдаю))

Чтобы у вас появились в редакторе дополнительные пол, допустим такого вида:

FireShot Capture - Редактировать запись ‹ Time To Roc_ - http___lakshmi.vinci27.ru_wp-admin_post.php

Открываем активный шаблон WordPress и вставляем в functions.php следующее (не забываем поменять кодировку на UTF-8):

// подключаем функцию активации мета блока (my_extra_fields)
add_action('add_meta_boxes', 'my_extra_fields', 1);
function my_extra_fields() {add_meta_box( 'extra_fields', 'Дополнительные поля', 'extra_fields_box_func', 'post', 'normal', 'high' );}

// код блока Дополнительные поля
function extra_fields_box_func( $post ){?>
<p><label>Название альбома: <input type="text" name="extra[pretitle]" value="<?php echo str_replace('"',"'" , get_post_meta($post->ID, 'pretitle', 1)); ?>" style="width:50%" /></label></p>
<p><label>Оценка: <input type="text" name="extra[ocenka]" value="<?php echo str_replace('"',"'" , get_post_meta($post->ID, 'ocenka', 1)); ?>" style="width:50%" /></label></p>
<p>Описание песни:<textarea type="text" name="extra[description]" style="width:100%;height:50px;"><?php echo str_replace('"',"'" , get_post_meta($post->ID, 'description', 1)); ?></textarea></p>
<p>Тип песни: <?php $mark_v = get_post_meta($post->ID, 'robotmeta', 1); ?>
<label><input type="radio" name="extra[robotmeta]" value="Оригинал" <?php checked( $mark_v, 'Оригинал' ); ?> /> Оригинал</label>
<label><input type="radio" name="extra[robotmeta]" value="Ремикс" <?php checked( $mark_v, 'Ремикс' ); ?> /> Ремикс</label>
<label><input type="radio" name="extra[robotmeta]" value="Караоке" <?php checked( $mark_v, 'Караоке' ); ?> /> Караоке</label>
</p>
<p>Жанр песни: <select name="extra[select]" />
<?php $sel_v = get_post_meta($post->ID, 'select', 1); ?>
<option value="Рэп">Рэп</option>
<option value="Попса" <?php selected( $sel_v, 'Попса' )?> >Попса</option>
<option value="Рок" <?php selected( $sel_v, 'Рок' )?> >Рок</option>
<option value="Хип-Хоп" <?php selected( $sel_v, 'Хип-Хоп' )?> >Хип-Хоп</option>
</select></p>
<p>Данная песня:
<label><input type="checkbox" name="extra[Новая]" value="1" <?php checked( get_post_meta($post->ID, 'Новая', 1), 1 )?> /> Новая</label>
<label><input type="checkbox" name="extra[Хит]" value="1" <?php checked( get_post_meta($post->ID, 'Хит', 1), 1 )?> /> Хит</label>
<label><input type="checkbox" name="extra[Радиохит]" value="1" <?php checked( get_post_meta($post->ID, 'Радиохит', 1), 1 )?> /> Радиохит</label>
<input type="hidden" name="need_check" value="Новая,Хит,Радиохит" />
</p>
<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php }
// включаем обновление полей при сохранении
add_action('save_post', 'my_extra_fields_update', 0);
/* Сохраняем данные, при сохранении поста */
function my_extra_fields_update( $post_id ){
if ( !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false; // проверка
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return false; // выходим если это автосохранение
if ( !current_user_can('edit_post', $post_id) ) return false; // выходим если юзер не имеет право редактировать запись
if( !isset($_POST['extra']) ) return false; // выходим если данных нет
//extra[white] указываем поля (checkbox), могут не определиться и не удаляться
$need_check = array_map( 'trim', explode(',', $_POST['need_check']) );
foreach( $need_check as $val )
$_POST['extra'][$val] = @$_POST['extra'][$val];
// Все ОК! Теперь, нужно сохранить/удалить данные
$_POST['extra'] = array_map('trim', $_POST['extra']); // чистим все данные от пробелов по краям
foreach( $_POST['extra'] as $key=>$value ){
if( empty($value) ){delete_post_meta($post_id, $key); // удаляем поле если значение пустое
continue;}
update_post_meta($post_id, $key, $value); // add_post_meta() работает автоматически
}
return $post_id;}

В этом огромном коде ничего не меняем, кроме того, что выделено синим - этот код и есть дополнительные поля в редакторе. Здесь мы можем менять их и программировать как угодно, например, если надо еще добавить поле: Псевдоним исполнителся, то допишем:

<p><label>Псевдоним исполнителся: <input type="text" name="extra[pcevdonimm]" value="<?php echo str_replace('"',"'" , get_post_meta($post->ID, 'pcevdonimm', 1)); ?>" style="width:50%" /></label></p>

и сохраним - в редакторе появится это поле.

Самое сложное с чекбоксами - если захотите добавить новые, то не забывайте его записывать в поле name="need_check" через запятую.

 

Теперь о том, как вывести в шаблон наш код:

Проверка поля. В зависимости от шаблона открываем (например, page.php - где выводятся страницы) и вставляем следующее:

if (get_post_meta($post->ID, 'pretitle', 1) != "") echo 'Название альбома: '.get_post_meta($post->ID, 'pretitle', 1).'<br>';
if (get_post_meta($post->ID, 'ocenka', 1) != "") echo 'Оценка: '.get_post_meta($post->ID, 'ocenka', 1);

Эти две записи выводятся в шаблоне только тогда, когда в админке они забиты:

21

Проверка радиокнопки. Напишем логическое выражение, если в админке будет выбран пункт Тип песни Оригинал, то отобразим текст:

if (get_post_meta($post->ID, 'robotmeta', 1) == "Оригинал") echo 'В админке Выбран оригинал!';

Проверка нажат ли чекбокс. 

if (get_post_meta($post->ID, 'Хит', 1) == 1) echo 'Чекбокс Хит нажат';

 

С помощью этих дополнительных полей появляется возможность реализовать поля для:

  • Стоимость товара
  • Размеры, ссылка миниатюры товара
  • Всевозможные параметры (цвет, производитель, число), по которым можно делать фильтры
  • Ссылка на картинку, документ для скачки
  • Запрограммировать время заезды, выезда посетителя (бронирование)

 

 

| | Добавить дополнительные поле, список, чекбокс или радиокнопку в статью и админку WordPress | Очень мощная и полезная статья для разработчиков Wordpress, которым необходимо встроить прямо в редактор статьи движка дополнительные поля, списки или |

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>