• Resolved zhart

    (@zhart)


    День добрый. Я правильно понимаю, что разработчики русскоязычные?
    Если да, скажите пожалуйста, как заставить ваш замечательный плагин читать данные не только из “com_content”, но и из дополнительных полей, которые, например, генерируются плагином ACF (Advanced Custom Fields)?

Viewing 15 replies - 1 through 15 (of 15 total)
  • Plugin Author LuckyWP

    (@theluckywp)

    Здравствуйте!

    Каким образом значения полей ACF выводится на сайте?

    Thread Starter zhart

    (@zhart)

    Насколько я понимаю, используются стандартные кастомные филды, встроенные в WordPress.

    Цитирую из документации ACF:

    Straight out of the box, WordPress comes with two post types: Posts and Pages. These allow you to write content in the administration area (sometimes called the back end), and have that content displayed on the public facing side of your website (the front end).

    But what if you wanted to store and retrieve more information on each page (or post) than just the content? (More fields than just title and content)..

    To help out with this, WordPress provides the ability to associate ‘post meta’ data with your pages or posts. This means you can add information like a start date to an event post, or a price to a product post, and then display that information to your website’s users using built in WordPress functionality.

    WordPress calls these ‘custom fields’, and provides a very basic form on the post and page editing screen to create and update these values:

    Custom Fields

    ACF helps you, as a developer, to take advantage of these custom fields. It gives your users a sleek user interface to manage their custom field information, and you a suite of powerful functions to retrieve and present it to your site’s visitors.

    ACF also provides a series of PHP functions that developers can use to display the information stored in these fields in their front-end templates, and an ever-expanding suite of actions and filters that make customising both the plugin, and the data it produces, a breeze.

    Plugin Author LuckyWP

    (@theluckywp)

    Да, это понятно.
    Каким образом в вашем случае эти поля выводятся на сайте?
    Какая у вас тема?
    Нужно больше деталей, чтобы разобраться 🙂

    Thread Starter zhart

    (@zhart)

    Спасибо, что уделяете время решению этой проблемы 🙂

    Рассказываю в подробностях.

    Пример сайта и страницы, на котором я использую ACF и хочу использовать ваш плагин для вывода содержания:
    https://geekus.ru/linux-files-encryption/

    На этом же сайте сейчас установлен и активирован ваш плагин, а также добавлен виджет в верхней части правого сайдбара (над поиском). В статье присутствует 3 заголовка (h2), но поскольку основная часть контента реализована посредством ACF, то содержание статьи не отображается. При этом вводный текст (самый первый абзац) выводится через стандартный “com_content”, и если добавить заголовки туда, то все начинает работать как положено (за исключением того, что нужно настроить стили для содержания, но это мелочи):

    View post on imgur.com

    На сайте используется тема Bootflex. Это старенькая тема на Бутстрапе, но это не имеет особого значения, поскольку интеграцию с ACF я реализовывал сам в дочерней теме. Причем занимался я этим давно, по мануалам с сайта ACF. Сейчас загляну в файлы темы и постараюсь восстановить всю последовательность. PHP знаю поверхностно, я художник-иллюстратор по основному роду деятельности, так что прошу прощения, если мои объяснения будут выглядеть не очень профессионально 🙂

    Смотрю сейчас в файл темы, отвечающей за вывод контента в постах.
    Стандартный контент (который представлен только вводным абзацем) выводится стандартным способом:
    <?php the_content(); ?>

    Дальше идет множество условий по выводу полей ACF, но в общем случае каждое кастомное поле выводится примерно следующим образом (опять же, согласно мануалу с сайта ACF:
    the_sub_field('sub_field_name');

    Вот, примерно так. Если нужно уточнить что-то еще – я готов это сделать.

    Thread Starter zhart

    (@zhart)

    Ах, да, еще важный момент, который касается непосредственно вывода заголовков.
    Они выводятся отдельно, согласно своих условий, например так (опять же, по мануалу):

    if( get_sub_field('block_title') ) :
    echo '<h2>' . get_sub_field('block_title') . '</h2>';
    endif;

    При этом загловки более низкого уровня (h3-h6) обычно выводятся подобным же образом, но иногда я их включаю в общее тело текста блока (в упомянутый “the_sub_field”). Но в большинстве случаев для соблюдения порядка все же вывожу заголовки отдельными полями.

    То есть если получится обрабатывать хотя-бы заголовки, выводимые отдельными полями – то в общем случае для меня уже этого будет достаточно. Если же получится парсить на предмет наличия заголовков абсолютно все кастомные поля – будет совсем замечательно. Но тут еще вопрос – насколько подобный парсинг скажется на нагрузке на сервер? Если сквозной парсинг будет сильно нагружать сервер, то однозначно хватит обработки только кастомных полей с заголовками. Я могу внести изменения в соответствующий файл дочерней темы, например, добавив нужный код в каждом случае при выводе заголовков. Собственно, основной вопрос – какой именно код туда добавить?

    • This reply was modified 4 years, 8 months ago by zhart.
    • This reply was modified 4 years, 8 months ago by zhart.
    • This reply was modified 4 years, 8 months ago by zhart.
    Plugin Author LuckyWP

    (@theluckywp)

    В вашем случае можно поступить вот так:

    Вынести весь код, который отвечает за генерацию контента из ACF-полей в отдельную функцию, которую повесить на хук the_content.

    Примерно вот так:

    function my_acf_content($content) {
        ob_start();
        ... ВАШ КОД С ВЫВОДОМ ПОЛЕЙ ...
        $html = ob_get_contents();
        return $content . $html;
    }
    add_filter('the_content', 'my_acf_content');
    Thread Starter zhart

    (@zhart)

    Спасибо большое за помощь.
    Попробовал, функционально все работает как нужно, только теперь весь контент из кастомных филдов выводится не в основной части страницы, а в правом сайдбаре, прямо над виджетом с содержанием. Пока вернул все как было, пытаюсь разобраться. Чувствую, я в чем-то туплю, а в чем именно – пока не понял. Если подскажете – буду благодарен.

    Plugin Author LuckyWP

    (@theluckywp)

    Подозреваю, что где-то некорректно перенесли код внутрь функции для вывода и вёрстка малость поехала.

    Thread Starter zhart

    (@zhart)

    Проверил – верстка корректная, секция с кастомными филдами выводится именно в правом сайдбаре, непосредственно перед виджетом с содержанием (вместо того, чтобы выводиться в секции с основным контентом):

    View post on imgur.com

    Thread Starter zhart

    (@zhart)

    Продолжаю эксперименты.
    Если отключить виджет, то кастомные филды не выводятся вообще. То есть получается, что их вывод теперь четко привязан к выводу содержания.

    Plugin Author LuckyWP

    (@theluckywp)

    Ваш код точно обёрнут в

    ob_start();
     ...
    $html = ob_get_contents();

    ?

    Thread Starter zhart

    (@zhart)

    Да, абсолютно точно. Я четко следовал вашим инструкциям.

    Plugin Author LuckyWP

    (@theluckywp)

    Стукнул в Facebook. Давайте пообщаемся в чате и попробуем решить проблему 🙂

    Plugin Author LuckyWP

    (@theluckywp)

    Решили вопрос.

    Thread Starter zhart

    (@zhart)

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

Viewing 15 replies - 1 through 15 (of 15 total)
  • The topic ‘ACF (Advanced Custom Fields) support’ is closed to new replies.