Удобная работа с произвольными полями с помощью плагина MaxSite — Произвольные поля

Удобная работа с произвольными полями с помощью плагина MaxSite - Произвольные поля | n-wp.ru
Плагин выводит форму ввода значения произвольного поля. Для любого произвольного поля можно настроить вид этой формы и задать несколько предустановленных значений.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Тем, кто постоянно используют произвольные поля, может пригодиться плагин MaxSite — Произвольные поля. Этот плагин является переработанной разработчиком MaxSite CMS версией плагина Custom Field GUI, облегчающего добавление данных в определенные произвольные поля. Суть такова: вы записываете в отдельный текстовый файл названия произвольных полей, которыми хотите пользоваться постоянно, определяете их вид, условия использования, для некоторых задаете значения по-умолчанию, и плагин по вашим требованиям отображает в редакторе постов форму ввода данных. Таким образом вам не нужно вспоминать названия произвольных полей, а при определенных условиях не нужно даже вводить данные, достаточно только выбрать один из введенных вами вариантов. Такой подход очень удобен, если вам нужно практически в каждом посте использовать определенный набор произвольных полей.

Настройка файла conf.ini

Для начала вам нужно настроить специальный файл conf.ini, в котором содержатся данные о произвольных полях, которые нужно отображать в редакторе постов. Этот файл находится в папке плагина. Если его там нет — создайте (обычный текстовый файл в кодировке UTF-8). Например, он может иметь такой вид:

[Верхние страницы]
type = textfield
size = 60
mymeta = top_pages

[Избранный пост]
type = checkbox
default = checked
mymeta = izbran_post

[Выберите]
type = radio
value = 0-9 # 10-19 # 20+
default = 10-19
mymeta = vybor_radio

[Уровень]
type = select
value = High # Medium # Low
default = Low
mymeta = uroven

[Ваш текст]
type = textarea
rows = 5
cols = 60
mymeta = vash_text

Что в итоге увидит автор поста при его редактировании? Вот такую картину:

Удобная работа с произвольными полями с помощью плагина MaxSite - Произвольные поля (2)

Таким образом видно, что файл conf.ini отвечает за то, для каких произвольных полей в редакторе нужно выводить формы ввода, как они должны выглядеть, и какие данные в них можно сразу подставлять.

Например, код

type = textfield
size = 60
mymeta = top_pages

указывает плагину, что для произвольного поля top_pages форма ввода будет стандартным текстовым полем с размером 60 знаков по ширине и 1 знак по высоте.

Код

type = checkbox
default = checked
mymeta = izbran_post

указывает плагину создать произвольное поле izbran_post, которое может иметь значение checked или быть пустым. Вы можете только выбрать это значение, или же не использовать произвольное поле.

Код

[Выберите]
type = radio
value = 0-9 # 10-19 # 20+
default = 10-19
mymeta = vybor_radio

указывает плагину создать произвольное поле vybor_radio. По-умолчанию этому полю будет присвоено значение 10-19. Однако вы с помощью radio-переключателя можете выбрать одно из установленных значений: 0-9, 10-19 или 20+.

Код

type = select
value = High # Medium # Low
default = Low
mymeta = uroven

указывает плагину создать произвольное поле uroven, у которого может быть несколько значений: High, Medium или Low. По-умолчанию будет использоваться значение Low, но вы с помощью выпадающего списка можете выбрать и другое значение для этого произвольного поля.

Код

type = textarea
rows = 5
cols = 60
mymeta = vash_text

создает произвольное поле vash_text, в которое с помощью текстовой формы шириной 60 знаков и высотой 5 знаков можно ввести произвольный текст, например, код HTML.

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

Решение прикладной задачи

Например, нужно вывести в конце каждого поста или автора поста (если текст полностью авторский), или ссылку на источник материала (если текст скопирован), или автора используемого текста (если вы публикуете гостевой пост или частично используете чужой авторский текст).

Создадим несколько произвольных полей для ссылки на источник:

[Источник или Автор - анкор]
type = textarea
rows = 1
cols = 67
mymeta = source_anchor

[Источник или Автор - урл]
type = textarea
rows = 1
cols = 67
mymeta = source_url

Этот код выведет два текстовых поля, нужных для ссылки, указывающей на источник. В одно из них нужно ввести ссылку, а во второе — желаемый анкор (текст этой ссылки).

Теперь создадим переключатель, с помощью которого можно будет выбрать, что вы хотите видеть в конце поста: автора поста, ссылку на источник, или же автора текста, используемого в посте.

[Выберите]
type = radio
value = sourceblog # sourcesite # sourceauthor
default = sourceblog
mymeta = vybor_radio 

В итоге формы ввода значения нужных нам для этой задачи произвольных полей будут выглядеть так:

Удобная работа с произвольными полями с помощью плагина MaxSite - Произвольные поля (3)

Теперь нам осталось только составить условие:

  • если выбрать пункт sourcesite, то в конце поста выведется ссылка на источник (если текст был скопирован с другого сайта)
  • если выбрать пункт sourceauthor, то в конце будет указан автор текста (не автор поста, а автор текста, который использовался в посте)
  • если же выбрать пункт sourceblog, то в конце будет выведен автор текущего поста

В файл single.php нужно вставить код, выводящий при определенных условиях значение произвольных полей, описанных выше:

//получаем значение произвольного поля vybor_radio
 $val_val ) $position=$val_val; } ?> 

//если значение произвольного поля vybor_radio равно sourcesite, то выводим ссылку на сайт автора текста из произвольного поля source_anchor и урлом из произвольного поля source_url, а перед ней ставим слово Источник
 
    <div class="source-div">
    	Источник: <a title=" $val_val ) echo $val_val; } ?>" href=" $val_val ) echo $val_val; } ?>"> $val_val ) echo $val_val; } ?></a>
	</div>


//если значение произвольного поля vybor_radio равно sourceauthor, то выводим ссылку на сайт автора текста из произвольного поля source_anchor и урлом из произвольного поля source_url, а перед ней ставим слово Автор
 
    <div class="source-div">
    	Автор: <a title=" $val_val ) echo $val_val; } ?>" href=" $val_val ) echo $val_val; } ?>"> $val_val ) echo $val_val; } ?></a>
	</div>


//если значение произвольного поля vybor_radio равно sourceblog, то выводим ник автора данного поста, а перед ним ставим слово Автор
 
    <div class="source-div">
    	Автор: 
	</div>

Этот простой пример показывает, насколько удобно становится работать с произвольными полями, используя плагин MaxSite — Произвольняе поля.

MaxSite - Произвольняе поля
Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

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

  1. Grawl

    Круто как! Можно из такого и лепить каталог.

    Ответить
  2. Sk8er

    Спасибо за пример!
    Но вот сейчас проблема появилась. А как быть со старыми постами, где значения не выставлены? Не редактировать же каждый пост. :)
    Можно как то добавить такое исключение, к примеру если значения не выставлены, то просто отображать

    Автор: <?php the_author(); ?>

    ?

    Ответить
  3. bmgksn

    как-то так

    <?php if ( $position == 'sourceauthor' ) : ?> 
        <div class="source-div">
            Автор: <a 0="" 1="$my_meta" 2="=" 3="get_post_custom_values(" 4="'source_anchor'," 5="$ID" 6=");" 7="if" 8="(" 9="$my_meta)" 10="{" 11="foreach" 12="(" 13="$my_meta" 14="as" 15="$val_key" 16="=" rel="nofollow"> $val_val ) echo $val_val; } ?>" href="<?php $my_meta = get_post_custom_values( 'source_url', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>"><?php $my_meta = get_post_custom_values( 'source_anchor', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?></a>
        </div>
    <?php else: ?>
    <div class="source-div">
            Автор: <?php the_author(); ?>
        </div>
    <?php endif; ?>
    
    Ответить
    1. Sk8er

      Я лучше пост щас отдельный напишу, слишком много вопросов получается :)

      Ответить
      1. tiaurus автор

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

        Ответить
        1. Sk8er

          Сделал, как написали. Собственно получилось следующее. В functions.php вставил такой код:

          function avtor() {
          $my_meta = get_post_custom_values( 'vybor_radio', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) $position=$val_val; } ?>
          <?php if ( $position == 'sourcesite' ) : ?><a  rel="nofollow ugc"> $val_val ) echo $val_val; } ?>"><?php $my_meta = get_post_custom_values( 'source_anchor', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?></a><?php endif; ?>
          <?php if ( $position == 'sourceauthor' ) : ?><?php $my_meta = get_post_custom_values( 'source_anchor', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?><?php else: ?>
          <?php the_author(); ?>
          <?php endif;
          }

          В single.php вывожу автора или источник так:

          <?php if (function_exists('avtor')) avtor(); ?>

          Файл conf.ini выглядит так:

          [Источник или автор]
          type = textarea
          rows = 1
          cols = 67
          mymeta = source_anchor
          
          [Выбор]
          type = radio
          value = sourceauthor # sourcesite
          mymeta = vybor_radio

          Думаю по коду видно почему я убрал часть кода из примера, ибо она больше не нужна.

          Ну и, собственно, проблема. Если выбрать sourceauthor и вписать автора, то всё ок, выводится тот автор, которого прописал. Если ничего не выбрать, но выводится автор стандартным

          <?php the_author(); ?>

          Но вот если выбрать sourcesite, то выводится и источник, и вордпресовский the_author();. Вот примеры:

          Использование sourceauthor:
          Использование the_author():
          Использование sourcesite:

          Автор выводится после статьи.

          Как быть?

          Ответить
  4. bmgksn

    добавить условие которое будет проверять заполнено ли какое либо из полей:

    $my_meta = get_post_custom_values( 'vybor_radio', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) $position=$val_val; } ?>
    <?php if ( $position == 'sourcesite' ) : ?><img src="http://ubuntovod.ru/wp-content/themes/TinyWeb/images/site.png" /><a 0="" 1="$my_meta" 2="=" 3="get_post_custom_values(" 4="'source_anchor'," 5="$ID" 6=");" 7="if" 8="(" 9="$my_meta)" 10="{" 11="foreach" 12="(" 13="$my_meta" 14="as" 15="$val_key" 16="=" rel="nofollow"> $val_val ) echo $val_val; } ?>"><?php $my_meta = get_post_custom_values( 'source_anchor', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?></a><?php endif; ?>
    <?php if ( $position == 'sourceauthor' ) : ?><img src="http://ubuntovod.ru/wp-content/themes/TinyWeb/images/user.png" /><?php $my_meta = get_post_custom_values( 'source_anchor', $ID ); if ( $my_meta) { foreach ( $my_meta as $val_key => $val_val ) echo $val_val; } ?>
    <?php if ( !$position ) : ?><img src="http://ubuntovod.ru/wp-content/themes/TinyWeb/images/user.png" /><?php the_author(); ?>
    <?php endif;
    
    Ответить
    1. Sk8er

      Вы чуть-чуть ошиблись в коде, методом тыка доделал его :) Но всё равно спасибо!

      Ответить
  5. DenS

    Большое спасибо за статью. У меня возник вопрос. Допустим, я вывожу произвольное текстовое поле. Например, такое

    <?php
    # выводим определенное произвольное поле
    $my_meta = get_post_custom_values( 'cena', $ID );
    if ( $my_meta)
    {
    echo '<div class=”cena”>';
    foreach ( $my_meta as $val_key => $val_val ) echo $val_val . '</div>';
    }
    ?>

    Мне необходимо, чтобы при определённом значении поля цена, например, «300», у меня
    под полем с ценой отображался определённый текст, например, «в стоимость
    включена доставка». То есть, если цена = «300», то выводится текст «в стоимость
    включена доставка», если цена = «200», то выводится текст «без учёта доставки».
    Как правильно это реализовать? Подскажите, пожалуйста. Заранее спасибо.

    Ответить
    1. tiaurus автор

      Ну примерно как-то так:

      
      
          ';
              foreach ( $my_meta as $val_key => $val_val ) echo $val_val . '
      '; ?> без учёта доставки
      '; ?> //если цена меньше 300 в стоимость включена доставка
'; ?> //если цена 300 и больше
Ответить
  1. DenS

    Спасибо, попробую!)

    Ответить
  2. DenS

    Не получилось что-то… Спрошу немного иначе. Выводим произвольное поле с гарантией.

    <?php
    $my_meta = get_post_custom_values( 'garant', $ID );
    if ( $my_meta)
    {
    echo '<div class="nomer"><h2>Гарантия:</h2><p>';
    foreach ( $my_meta as $val_key => $val_val ) echo $val_val . '</p></div>';
    }
    ?>
    

    Нужно сделать так, чтобы при гарантии «24 месяца» выводился «определённый текст», а при гарантии «12 месяцев» выводился «другой текст». То есть, если гарантия = (строго равно) «24 месяца», выводится «текст1». Если гарантия = «12 месяцев», выводится «текст2». Помогите, пожалуйста, разобраться. Заранее благодарю.

    Ответить