Как натянуть карточку тарифа на WordPress?

Ссылка скопирована
1 ответ

У меня есть карточка c такой структурой:
Название тарифа

  • Для кого
  • Цена тарифа
  • Его преимущества в виде
    1. Красота
    2. Простота
    3. Удобство

Есть ещё информация, но она больше статическая.

Мне нужно сделать так, чтобы пользователь в админке мог добавлять новую карточку. Скорее всего это делается с помощью рубрик, но вот у карточки есть the_title и the_content, но the_content выводит всё, что не the_title. Или нет?
Так же мне нужно чтобы я мог закрепить одну из карточек, конечно было бы круто с помощью модификатора

Есть ещё произвольные поля, вроде бы как это то что мне надо, но мне не нравится реализация. Есть какой то другой способ, более приятный, или плагин. Или же только это. Было бы круто, если бы я мог обойти каждый пост из рубрики с помощью, и как объект указать его свойство при выведении

Дополнительно:

Ответы:

the_content выводит всё, что не the_title. Или нет?

Или нет. the_content выводит поле post_content с учетом всех модификаций и дополнений, выполненных "на лету" через API WP.

Есть какой то другой способ, более приятный, или плагин.

Есть более одного плагина управления произвольными полями (custom fields), работающие как с нативными post_meta, так и с нестандартными. Самый популярный - ACF.

обойти каждый пост из рубрики

Обойти каждый - это что-то из прошлого века ))) Вордпресс, работая с SQL базой данных, позволяет делать разнообразные выборки без обхода всех записей. В Основном цикле (the Loop) шаболна Темы выполняется последовательный обход выбранных записей, и глобальной переменной $post (объект) присваивается значение текущей записи. А то, что не входит в свойства объекта, например, метаданные (произвольные поля, custom fields), можно получить при помощи функций. Это базовый функионал движка.

Так что самый простой и самый канонический путь реализации "карточки":
1. пользовательский тип записи "тариф";
2. произвольные поля "для кого", "цена" и т.д. для записей типа "тариф"
3. шаблон вывода записей типа "тариф" в Цикле которого реализовано красивое форматирование структуры карточки.

  • Спасибо. Уже успел реализовать всё это. Единственный вопрос, который я никак и нигде не могу найти. Как бы Вы вывели вложенный список. Получается примерно так

    <?php the_title() ?>
    <?php the_field('type_client')
    <?php the_field('price') ?>
    Возможности тарифа
    ul
    li /li
    li /li
    li /li
    li /li
    li /li
    /ul

    li может быть сколько угодно, поэтому тут должно быть динамическое значение. А что то типа массива в ACF я не нашёл
    Я могу для каждого преимущества создать поля и сделать их необязательными и по идее можно заполнить сколько хочешь, но ведь это будет не очень красиво

  • А что то типа массива в ACF я не нашёл

    Кажется, у ACF это называется "повторитель" и есть только в PRO-версии. Могу ошибаться, я с ACF сталкивался всего один раз несколько лет назад.

  • SherbakovFirst, Вам нужен ACF Pro и что-то вроде этого
    &lt;?php // Получаем повторяющееся поле $repeater_field = get_field('list_of_items');  if ($repeater_field) {     // Выводим список элементов     echo '&lt;ul&gt;';     foreach ($repeater_field as $item) {         $item_name = $item['item_name'];         echo '&lt;li&gt;' . esc_html($item_name) . '&lt;/li&gt;';     }     echo '&lt;/ul&gt;'; } ?&gt;

    &lt;?php // Получаем повторяющееся поле $repeater_field = get_field('list_of_items'); if ($repeater_field) { // Выводим список элементов echo '&lt;ul&gt;'; foreach ($repeater_field as $item) { $item_name = $item['item_name']; echo '&lt;li&gt;' . esc_html($item_name) . '&lt;/li&gt;'; } echo '&lt;/ul&gt;'; } ?&gt;

  • prevo, да, спасибо. Я уже сделал без про, с костылём, но зато бесплатно. Я просто сделал 5 полей. И человек, создавая тариф может оставить поле пустым. В коде же реализовал так, что если поле пустое, то li не выводить. Да, костыль, но что поделать)
  • Нет, не костыль. Нормальная доработка, компенсирующая отсутствие в плагине необходимого функционала.

Как натянуть карточку тарифа на WordPress?

Здравствуйте, для удобной работы с произвольным полями есть плагин Advanced Custom Fields
Он, в принципе, интуитивен, но если нужно руководство -- https://youtu.be/rc46Yyi5FNA?si=nvtNHXfP7cqZe9qh&t=160

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для карточек тарифов лучше не использовать рубрики. Рубрики нужны для группировки записей, а тариф — это отдельная сущность с набором полей: название, цена, описание, список преимуществ, пометка «популярный» или «закреплённый». Есть два нормальных варианта: ACF-повторитель на странице или отдельный кастомный тип записи.

Если тарифов мало и они нужны только на одной странице, достаточно ACF Repeater:

  • название тарифа;
  • для кого;
  • цена;
  • преимущества — repeater/list;
  • кнопка;
  • флаг «рекомендуемый».

Если тарифы нужны в разных местах сайта, лучше CPT tariff. Тогда каждый тариф редактируется как отдельная запись, а поля добавляются через ACF:

register_post_type('tariff', [
    'label'  =&gt; 'Тарифы',
    'public' =&gt; false,
    'show_ui' =&gt; true,
    'supports' =&gt; ['title', 'editor', 'thumbnail'],
]);

register_post_type('tariff', [ 'label' =&gt; 'Тарифы', 'public' =&gt; false, 'show_ui' =&gt; true, 'supports' =&gt; ['title', 'editor', 'thumbnail'], ]);

Для «закрепить одну карточку» добавьте true/false поле is_featured или числовое поле сортировки. В выводе карточек сначала показывайте рекомендованный тариф:

$query = new WP_Query([
    'post_type'  =&gt; 'tariff',
    'meta_key'   =&gt; 'is_featured',
    'orderby'    =&gt; ['meta_value_num' =&gt; 'DESC', 'menu_order' =&gt; 'ASC'],
]);

$query = new WP_Query([ 'post_type' =&gt; 'tariff', 'meta_key' =&gt; 'is_featured', 'orderby' =&gt; ['meta_value_num' =&gt; 'DESC', 'menu_order' =&gt; 'ASC'], ]);

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

Если не нравится ACF, можно использовать Carbon Fields, Meta Box или нативные Gutenberg-блоки. Но идея та же: не пытаться собирать тариф из произвольного HTML, а хранить каждую часть карточки отдельным полем.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно