Выводим дополнительные поля в запись WordPress.

25
23441

Введение

Всем привет! В данной статье мы продолжим говорить про дополнительные поля (metabox) в wordpress. Одна из статей на сайте была полностью посвящена созданию данных полей: Создаем свои дополнительные поля (metaboxes) в WordPress. Сегодня наша задача научится их выводить в нужном месте на сайте. Это делается очень просто, благодаря обширному функционалу движка WordPress. Если вы помните, мы создавали поля, которые отображаются в панели на странице добавления записи. Эти данные из полей сохраняются в таблице и нам останется только их получить.

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

С помощью функции get_post_meta(); мы получили данные из тех полей, что мы создали. Функция принимает некоторые аргументы, давай разберемся какие:

  1. Первый аргумент сообщает функции идентификатор записи. Данная переменная глобальная в WordPress, поэтому таким образом, можно легко получить идентификатор.
  2. Второй аргумент указывает функции идентификатор поля, данные из которого мы хотим получить. Если вы читали прошлый урок, то помните, что мы называли поля именно таким образом.
  3. Третий аргумент выборочный, он говорит функции, что необходимо вернуть первое значение указанного идентификатора поля.

Теперь в том месте где Вам необходимо выводите данные из meta полей с помощью echo .

Если Вы хотите создать полностью новый тип записи в WordPress почитайте эту статью.

Если Вам нужная постраничная навигация (пагинация) для Ваших записей, читайте.

Заключение

Как видите, вывести дополнительные поля очень просто и между прочим, мы использовали только встроенный функционал WordPress’a. Спасибо за внимание, рад Вам помочь. Всего доброго!

25 КОММЕНТАРИИ

  1. А можно как для чайников написать типа ? — Очень надо правильно функцию внедрить, а не искать по одиночным кодам на разных сайтах.

    • Что конкретно Вас интересует? Я напишу, с удовольствием!

  2. Спасибо за полезные уроки. Очень много перечитала — вы наиболее доступно и подробно для начинающих пишете. Надеюсь, еще не поздно с вопросами, спустя 4 месяца ))

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

    Ну то есть — например, автор пишет про королей, капусту и сургучи. Сургуча и капусты немного, их можно в общих «Страницах» создавать, а вот королей побольше, в них уже можно будет заблудиться в общей категории.
    Кроме того, иногда вместо автора пишет его бабуля и желательно максимально упростить для нее задачу: зашел — кликнул по королям — написал/заполнил поля — сохранил

    Поэтому королей надо:
    — вынести отдельной категорией «Короли» слева в админ-панели
    — по типу они должны оставаться страницами, но со своим шаблоном
    — в шаблоне должны быть уже зашиты дополнительные поля: родился, женился, чем прославился и т.п.

    С полями из вашего урока более-менее понятно.
    А вот с админ-категорией и созданием шаблона хотелось бы познакомиться.

    —- И может есть возможность сохранить некую готовую страницу как шаблон?
    Ну вот что-то накидал, понравилось — о! а сохраню-ка я ее в шаблон для «королей» (шаблонAB)
    —— И еще — можно ли создать админ-рубрику Короли и задать ей дефолтный шаблонAB : чтоб не выбирать из доступных, а сразу открывался

    • Привет! Есть два варианта:
      1-й вариант При выводе данных делать проверку if($textInput) тогда выводим данные.
      2-й вариант: Изменить функцию сохранения в файле functions.php.

  3. Здравствуйте.
    Сделал по вашей статье и всё получилось, но в определённом поле необходим визуальный редактор текста (что удобнее переносить данные из Ворда). Подскажите пожалуйста, как это сделать на примере вашей статьи. Функция кажется wp_editor()

  4. День добрый!
    Подскажите, как добавить поле, в данных которого была бы ссылка на существующие записи, с возможностью выбора из уже существующих при редактировании.

  5. […] полей, которые Вы создали, почитайте статью: Вывод дополнительных полей на сайт. В нашем случае, вывод данных будет происходить в […]

  6. Добрый день, подскажите, как сделать, если поля не заполнены, этот блок не отображался на сайте. Дело в том, что у меня перед каждым полем стоит картинка. И если поле не заполнено, то текст не выводится, а картинка появляется.

    • День добрый! Вы можете делать проверку на то, существует ли запись данных. Например:

      тут выводим, если $data заполнена.

      Переменная $data, это переменная, в которую Вы записываете значение поля:
      $data = get_post_meta($post->ID, ‘data’, true);

    • Спасибо большое, получилось. Но теперь возник такой вопрос: у меня несколько textinput, в каждый записывается значение, например: 25 минут, 4 порции, 350 ккал, простой рецепт. Так вот, если вначале указаны цифры, то эти поля выводятся, а вот если сразу идет текст, то почему-то это поле не отображается. В моем случае это поле «простой рецепт». Стоит только поставить какую-либо цифру перед этим текстом, то поле появляется. Как можно исправить такую проблему?

    • Очень странно! :)) Предлагаю произвести простой дебаг, т.к. я не имею возможности посмотреть, как именно у Вас это работает. Попробуйте следующее:
      1) С помощью функции var_dump($data) проверьте какие данные существуют на момент вывода в переменной, где хранится ваше значение поля.
      2) Если данных нету, значит проблема в функции, которая сохраняет значения в базу данных.
      3) Если данные есть, значит вывод не происходит, по не понятным причинам. В любом случае, нужно смотреть какие данные приходят или не приходят.
      Также, чтобы избежать возможные ошибки при разработке сайта, рекомендую включить debug = true; в файле wp-config.

  7. Спасибо за статью, использую пользовательские поля, но только типа text и textarea, сегодня пробую select — не могу вывести label на странице записи, выводит значение из value (1 или 2). Как обратиться к названиям этих полей, а не идентификаторам?

  8. Можно ли эти допполя добавить в форму регистрации пользователя?
    Нужно 3 числовых поля — геокоординаты, километры, литры (топлива) и потом через js делать расчеты..

  9. Я создал отдельный шаблон по Вашим урокам и хочу вывести те поля, которые в уроках про красную книгу прямо внутрь записи, но почему-то не выводятся они((( поменял id, чтобы совпадали, но все без толку… Не подскажете что делать?

  10. Не могу найти статью как вывести все записи в цикле.
    Делал по этим трем урокам http://exabyte.ws/javascript-i-jquery/sozdaem-svoj-sobstvennyj-tip-zapisej-v-wordpress-chast-3.html/ .

    Теперь хочу вывести в блок все записи от туда. Сама запись выводится(заголовок и изображение). Но до полей не могу добраться.
    get_field(), the_field() и get_post_meta не работают.

    в шаблоне вывожу вот так
    [code]
    $args = array(
    ‘posts_per_page’ => -1,
    ‘post_type’ => ‘red_book’
    );
    $query = new WP_Query( $args );
    $counter_my = 0;
    //require_once($_SERVER[‘DOCUMENT_ROOT’].’/wp-blog-header.php’);
    if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
    $query->the_post();
    ?><img src="» />’

    ID, ‘city’, true);
    echo get_post_meta($post->ID, ‘Город’, true);?>

    <?
    }
    print_R(get_defined_vars());
    }
    wp_reset_postdata();
    [/code]

    • Привет! Я вывожу записи следующим циклом, вот пример:
      [code]
      < ?php $loop = new WP_Query( array( 'post_type' => array(‘red_book’)) ); ?>
      < ?php if ( $loop->have_posts() ) : ?>
      < ?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
      < ?php the_content(); ?>
      < ?php endwhile; ?>
      < ?php endif; ?>
      [/code]
      Если получится отпишитесь.

  11. В этом уроке были рассмотрены основные принципы и способы вывода в шаблоне базовых мета полей в WordPress заданных через плагин Advanced Custom Field. Как вывести не описанные здесь поля можно найти в документации плагина .

  12. Добрый день. Спасибо за материал.
    Подскажите, а как теперь, имея кастомные типы записей,который мы сделали и кастомную таксономию(категории),к которой мы отнесли эти типы записей, заставить выводится по типу: указываем кастомную категорию и получаем все кастомные посты,которые к ней относятся. Думал что это вроде как само собою подразумевается (по аналогии обычные посты и категории к ним прикрепленные), но нет.. такое ощещение что связи нет меж кастомной категорией и кастомнным типом записи.
    Использовал вот такой функционал, чтобы добиться этого:

    $cat = 5; //5 — ID кастомной категории
    $cat_name = ‘canada’; //canada — название или альтернативное имя(slug) категории
    $post_type = ‘my_custom_post_type’ //созданный кастомный тип записи

    $posts = get_posts( array(
    ‘category’ => $cat,
    ‘category_name’ => $cat_name,
    ‘post_type’ => $post_type, //post
    ‘post_status’ => ‘publish’,
    ) );
    echo «

    »;die;

    РЕЗУЛЬТАТ: массив пуст.
    если на месте $cat будет ID обычной категории
    на месте $cat_name будет название или альтернативное имя(slug) обычной категории
    на месте $post_type будет post
    то выведится то, что нужно и корректно.

    Подскажите в чем проблема и как можно выводить кастомные посты принадлежащие определенной кастомной(зарегистрированной) категории?
    Спасибо.

  13. Добрый день! Спасибо огромнейшее за статью! Все очень просто и гениально!
    Но мне одного не хватает, поэтому прошу помощи. У меня стоит плагин, чтобы посетители сами создавали посты. То есть, там есть форма заполнения «Названия поста», «Описание» и прочее. Вот как раз дополнительно хочу чтобы эти созданные поля, которые по Вашим статьям я создал, посетители вводили сами. Как я понимаю, для этого нужно в файле с выводом данной формы заполнения добавить какой-то код… Вот не пойму какой. Можно ли вообще такое сделать?

  14. Здравствуйте, сделал все точно так, как у вас. Но ничего не выводится. Поля в админке есть, их заполнил. А вот вывести не получается.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста оставьте комментарий!
Введите ваше имя