BloGGood.ru

Блог Костаневича Степана

WordPress, PHP, HTML, CSS, Windows

Блог на разные темы, seo-оптимизация, раскрутка сайта, создание сайта, вкусные эффекты для сайта и многое другое…

Главная » Wordpress » Как создать дополнительные поля на WordPress для статей и страниц

Как создать дополнительные поля на WordPress для статей и страниц

2015-11-27 / Вр:23:21 / просмотров: 7900

В статье я расскажу, как создать дополнительные поля на WordPress для статей или страниц.  Лично я использую дополнительные поля для статей или станиц в выводе цены, скидок, различных надписей «продано» и т. д.
Ближе к делу.

Немного расскажу о самом коде, что я знаю и что я понял. А потом дам весь код целиком.

Код вставляется в файл «functions.php»

Создание блока в произвольных полях:

-  для постов

Вставьте вот такой код:

// подключаем функцию активации блока (my_extra_plgin_post)
add_action('add_meta_boxes', 'my_extra_plgin_post');

function my_extra_plgin_post() {
add_meta_box(
'extra_plgin_post', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_post_func', // Функция, которая вызывается. (HTML поля)
'post', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
}

- для страниц

Вставьте вот такой код:

// подключаем функцию активации блока (my_extra_plgin_page)
add_action('add_meta_boxes', 'my_extra_plgin_page');

function my_extra_plgin_page() {
add_meta_box(
'extra_plgin_page', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_page_func', // Функция, которая вызывается. (HTML поля)
'page', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
}

Можно два способа объединить вот таким образом:

// подключаем функцию активации блока (my_extra_plgin_post)
add_action('add_meta_boxes', 'my_extra_plgin_post');

function my_extra_plgin_post() {
add_meta_box(
'extra_plgin_post', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_post_func', // Функция, которая вызывается. (HTML поля)
'post', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
add_meta_box(
'extra_plgin_page', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_page_func', // Функция, которая вызывается. (HTML поля)
'page', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
}

Создание HTML формы произвольных полей

В подсказке было указано, какую функцию нужно выводить для вызова HTML полей. Смотрите строку №8, №15 верхнего кода:

'extra_plgin_post_func', // Функция, которая вызывается. (HTML поля - для записи)
'extra_plgin_page_func', // Функция, которая вызывается. (HTML поля - для страниц)

Естественно вы можете дать свои названия для вызова функции. Но для примера я буду использовать именно эти.

Выводим HTML форму:

-  для постов

<!-- макет -->
function extra_plgin_post_func($post){
?>
<!-- здесь пишем HTML код -->
<input ENGINE="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}

Вот пример:

function extra_plgin_post_func($post){
?>
<p>Цена: <? $atb_sting1 = get_post_meta($post->ID, 'atb_sting1', 1); ?>
<label><input type="number" step="0.1" name="extra[atb_sting1]" value="<? if($atb_sting1){echo $atb_sting1;}?>" /></label>

</p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}

Строка №7 - спрятанное поле name="atb_nonce", нужно для проверки при сохранении данных.

-  для страниц:

function extra_plgin_page_func($post){
?>
<p>Цена: <? $atb_sting2 = get_post_meta($post->ID, 'atb_sting2', 1); ?>
<label><input type="number" step="0.1" name="extra[atb_sting2]" value="<? if($atb_sting2){echo $atb_sting2;}?>" /></label>

</p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}

Строка №7 - спрятанное поле name="atb_nonce", нужно для проверки при сохранении данных.
Также обратите внимание на строку №3.

<? $atb_sting2 = get_post_meta($post->ID, 'atb_sting2', 1); ?>

Функция get_post_meta должна стоять обязательно для получения значения произвольных полей. Естественно, сколько полей, столько должно быть и функций с правильно указанными параметрами.

Вот, например, в поле, если стоит значение

<input type="number" step="0.1" name="extra[atb_sting_post]" value="<? if($atb_sting_post){echo $ atb_sting_post;}?>" />

то, в функции должно быть вот так:

<? $atb_sting_post = get_post_meta($post->ID, 'atb_sting_post', 1); ?>

Сохраняем данные с полей

// сохранение данных
add_action('save_post', 'atb_box_update'); // Вызываем функцию при сохранении
function atb_box_update($post_id){
if (!wp_verify_nonce($_POST['atb_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; // Проверка, что нам пришли все поля (выходим если данных нет)
// Все ОК! Далее сохранить/удалить данные
foreach($_POST['extra'] as $key=>$value){
if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
delete_post_meta($post_id, $key); // Удаляем поле, если значение пустое
continue; // Продолжаем
}
update_post_meta($post_id, $key, $value); // Обновляем или добавляем данные
}
return $post_id;
}

Готовый код:

// для записей
// подключаем функцию активации блока (my_extra_plgin_post)
add_action('add_meta_boxes', 'my_extra_plgin_post');

function my_extra_plgin_post() {
add_meta_box(
'extra_plgin_post', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_post_func', // Функция, которая вызывается. (HTML поля)
'post', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
}

function extra_plgin_post_func($post){
$atb_sting1 = get_post_meta($post->ID, 'atb_sting1', 1);
?>
<p>Цена:
<label><input type="number" step="0.1" name="extra[atb_sting1]" value="<? if($atb_sting1){echo $atb_sting1;}?>" /></label>

</p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}
// для страниц
// подключаем функцию активации блока (my_extra_plgin_page)
add_action('add_meta_boxes', 'my_extra_plgin_page');

function my_extra_plgin_page() {
add_meta_box(
'extra_plgin_page', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_page_func', // Функция, которая вызывается. (HTML поля)
'page', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - сбоку)
);
}
function extra_plgin_page_func($post){
$atb_sting2 = get_post_meta($post->ID, 'atb_sting2', 1);
?>
<p>Цена:
<label><input type="number" step="0.1" name="extra[atb_sting2]" value="<? if($atb_sting2){echo $atb_sting2;}?>" /></label>

</p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}
// сохранение данных
add_action('save_post', 'atb_box_update'); // Вызываем функцию при сохранении
function atb_box_update($post_id){
if (!wp_verify_nonce($_POST['atb_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; // Проверка, что нам пришли все поля (выходим, если данных нет)
// Все ОК! Далее сохранить/удалить данные
foreach($_POST['extra'] as $key=>$value){
if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
delete_post_meta($post_id, $key); // Удаляем поле, если значение пустое
continue; // Продолжаем
}
update_post_meta($post_id, $key, $value); // Обновляем или добавляем данные
}
return $post_id;
}

В итоге у вас должно получиться вот так:

Как создать дополнительные поля на WordPress для статей и страниц

На сайте, чтобы вывести результат из дополнительного поля, пропишите вот такой код:

- для записей:

<? $atb_sting1 = get_post_meta($post->ID, 'atb_sting1', 1); echo $atb_sting1; ?>

Либо вот так:

<?php echo get_post_meta($post->ID, 'atb_sting1', 1); ?>

- для страниц:

<? $atb_sting2 = get_post_meta($post->ID, 'atb_sting2', 1); echo $atb_sting2; ?>

Либо вот так:

<?php echo get_post_meta($post->ID, 'atb_sting2', 1); ?>

В подарок хочу оставить вам еще один кодик:

// для записей
// подключаем функцию активации блока (my_extra_plgin_post)
add_action('add_meta_boxes', 'my_extra_plgin_post');

function my_extra_plgin_post() {
add_meta_box(
'extra_plgin_post', // название должно быть уникальным
'Дополнительное поле', // Выводится в админке название дополнительного поля
'extra_plgin_post_func', // Функция, которая вызывается. (HTML поля)
'post', // Тип записи (post - для записи, page - для страниц)
'normal' // Расположение блока ('normal' - вверху, 'advanced' - внизу или 'side' - с боку)
);
}

function extra_plgin_post_func($post){
?>

<p>Заголовок товара (title)<? $title_post = get_post_meta($post->ID, 'title_post', 1); ?>
<label><input type="text" name="extra[title_post]" value="<? if($title_post){echo $title_post;}?>" style="width:50%" /></label></p>

<p>Описание товара:
<textarea type="text" name="extra[description]" style="width:100%;height:50px;"><?php echo get_post_meta($post->ID, 'description', 1); ?></textarea>
</p>
<p>Скидка<? $skidka = get_post_meta($post->ID, 'skidka', 1); ?>
<label><input type="number" step="0.1" name="extra[skidka]" value="<? if($skidka){echo $skidka;}?>" style="width:10%" /></label> %</p>
<p>Выберите валюту:<? $atb_radio2 = get_post_meta($post->ID, 'atb_radio2', 1); ?>
<label><input type="radio" checked="checked" name="extra[atb_radio2]" value="1" <?php checked($atb_radio2, '1'); ?> /> $</label>
<label><input type="radio" name="extra[atb_radio2]" value="0" <?php checked($atb_radio2, '0'); ?> /> Руб.</label>
<label><input type="radio" name="extra[atb_radio2]" value="2" <?php checked($atb_radio2, '2'); ?> /> Грн.</label>
</p>
<p>Цена: <? $atb_sting1 = get_post_meta($post->ID, 'atb_sting1', 1); ?>
<label><input type="number" step="0.1" name="extra[atb_sting1]" value="<? if($atb_sting1){echo $atb_sting1;}?>" /></label>
<!-- вывод валюты -->
<? if($atb_radio2 == 1){echo"$";} else{if($atb_radio2 == 0){echo"РУБ";} else{if($atb_radio2 == 2){echo"ГРН.";}}}?>
</p>
<p>Наличие товара:<select name="extra[select]" /><?php $sel_v = get_post_meta($post->ID, 'select', 1); ?>
<option value="0">----</option>
<option value="1" <?php selected( $sel_v, '1' )?> >Проданно</option>
<option value="2" <?php selected( $sel_v, '2' )?> >Есть в наличие</option>
<option value="3" <?php selected( $sel_v, '3' )?> >В дороге</option>
</select></p>
<p>Сейчас товар: <? if($sel_v == 1){echo"Продано";} else{if($sel_v == 2){echo"Есть в наличие";} else{if($sel_v == 3){echo"В дороге";}}}?></p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
<?php
}

// сохранение данных
add_action('save_post', 'atb_box_update'); // Вызываем функцию при сохранении
function atb_box_update($post_id){
if (!wp_verify_nonce($_POST['atb_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; // Проверка, что нам пришли все поля (выходим, если данных нет)
// Все ОК! Далее сохранить/удалить данные
foreach($_POST['extra'] as $key=>$value){
if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
delete_post_meta($post_id, $key); // Удаляем поле, если значение пустое
continue; // Продолжаем
}
update_post_meta($post_id, $key, $value); // Обновляем или добавляем данные
}
return $post_id;
}

В результате в админке будет вот так:

Как создать дополнительные поля на WordPress для статей и страниц

Чтобы вывести на сайте, откройте файл «single.php» или в «index.php» и вставьте в нужное место для товара вот такие кода:

Заголовок товара (title)
<? $title_post = get_post_meta($post->ID, 'title_post', 1);  echo $title_post; ?>

Описание товара:
<?php echo get_post_meta($post->ID, 'description', 1); ?>

СКИДКА:
<? $skidka = get_post_meta($post->ID, 'skidka', 1); echo $skidka; ?>

Цена и валюта:

<? $atb_sting1 = get_post_meta($post->ID, 'atb_sting1', 1);  echo $atb_sting1; ?>

<? $atb_radio2 = get_post_meta($post->ID, 'atb_radio2', 1); if($atb_radio2 == 1){echo"$";} else{if($atb_radio2 == 0){echo"РУБ";} else{if($atb_radio2 == 2){echo"ГРН.";}}}?>

Сейчас товар:
<? $sel_v = get_post_meta($post->ID, 'select', 1); if($sel_v == 1){echo"Продано";} else{if($sel_v == 2){echo"Есть в наличие";} else{if($sel_v == 3){echo"В дороге";}}}?>

В итоге вот, что у меня получилось:

Как создать дополнительные поля на WordPress для статей и страниц

Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓

Получай обновления блога!!! Подпишись:

Популярные статьи:

4 Ответов на комментарий - Как создать дополнительные поля на WordPress для статей и страниц

  1. Wal

    Сумбурно как-то получилось.
    Надо было сначала объяснить что это за поля и зачем их нужно использовать (лично я не очень понял это из статьи), а затем уже как это реализовать.
    В последнем примере не понятно нафига используются дополнительные поля, если всё это можно в самой записи сделать…
    Знаю что доп. поля в WPесть, да – они по умолчанию выключены, да – ими не все пользуются, да – это довольно мощный инструмент.
    Как их использовать с максимальной эффективностью осталось загадкой…

  2. Avatar photo Степан => автор блога

    “Лично я использую дополнительные поля для статей или станиц в выводе цены, скидок, различных надписей «продано» и т. д.” – этого не достаточно было?

  3. Леонид

    Как сделать дополнительное поле с отзывами для каждой страницы разными?

  4. Avatar photo Степан => автор блога

    почитайте “Как создать шаблон страницы WordPress

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

;-) :| :x :twisted: :smokes: :smile: :shock: :sad: :rose: :roll: :razz: :pop-corne: :oops: :o :mrgreen: :lol: :idea: :grin: :gazeta: :evil: :cry: :cool: :coffe: :arrow: :???: :?: :!:

Чтобы добавить в комментарий код HTML, PHP, CSS, JavaScript, нужно сделать так: [code] ваш код [/code]

Метки:

Мои цели на 2018-2019:

1). Закончить тему «Bootstrap»

2). Закончить тему «Все про PHP и MySQL»

3). Создать портфолио и мини интернет-магазин шаблонов

4). Довести количество статей до 800

5). Добиться посещаемости 3000 человек/сутки

6). Увеличить число подписчиков до 250

Статистика по блогу

Количество записей на блоге: 810
Количество страниц на блоге: 20
Количество рубрик на блоге: 28
Количество меток на блоге: 72
Количество комментариев на блоге: 4716