Правильное использование фильтра the_content

Вопрос или проблема

Это немного сложно без публикации кучи кода, но мой вопрос заключается в следующем: Каковы преимущества фильтрации через apply_filters('the_content', 'anything');, и учитывая мой пример цикла, я фильтрую the_content чрезмерно или неэффективно, или есть лучший способ?

Я спрашиваю, потому что только что попробовал плагин Shareaholic, который, как предполагается, обнаруживает конец поста и вставляет социальные ссылки. Однако в моем цикле я обнаруживаю, что он вставляет себя каждый раз, когда вызывается apply_filters('the_content', 'anything');, что в моем случае происходит довольно часто.

Поскольку я новички в WP и PHP, а Shareaholic – это устоявшийся сервис, я просто предполагаю, что эти проблемы возникли из-за незнания с моей стороны. У Shareaholic есть шорткод, который я могу внедрить непосредственно в шаблон, но я просто хочу получить общую обратную связь / подтверждение / критику моего подхода и любые идеи о том, как можно упростить или что может вызывать проблему.

Мой цикл выглядит примерно так:

    <?php /* Начало цикла */ ?>
    <?php while (have_posts()) : the_post(); ?>

    <?php function_for_post_banner() /* фильтры 'the_content' для добавления баннера поста */ ?>

    <?php get_template_part('templates/loop', 'switch');
    /* Switch проверяет тип поста и применяет условную разметку, обрабатывает медиа для каждого типа поста и вызывает 'the_content' специфичный для каждого случая. */ ?>

    <? fuction_attachements();
    /* выполняет условное форматирование с вложениями поста, например изображения, медиа и документы, все фильтруются через the_content */ ?>
    <?php /* Конец цикла */ ?>

Буду признателен за любые советы по этому поводу — спасибо.

Вы хотите добавить фильтр в очередь фильтров для the_content:

add_filter('the_content', 'anything');

Ядро WordPress затем вызывает apply_filters внутри функции the_content, чтобы запустить все фильтры в очереди:

function the_content( $more_link_text = null, $strip_teaser = false) {
    $content = get_the_content( $more_link_text, $strip_teaser );
    $content = apply_filters( 'the_content', $content );
    $content = str_replace( ']]>', ']]&gt;', $content );
    echo $content;
}

.

Ответ или решение

Правильное использование фильтрации через the_content

Введение

WordPress предоставляет мощный механизм фильтрации контента, одним из ключевых элементов которого является функция apply_filters('the_content', $content). Эта функция позволяет интегрировать внешние плагины и собственные функции для изменения содержимого постов перед его отображением. Тем не менее, новичкам может быть сложно правильно использовать этот механизм, особенно в контексте обработки циклов и взаимодействия с плагинами, например, Shareaholic.

Зачем использовать фильтрацию the_content?

Фильтры в WordPress позволяют:

  1. Модифицировать контент: Вы можете добавлять, изменять или удалять элементы из контента поста.
  2. Создавать переиспользуемые функции: Одна и та же функция может работать в разных местах, если она используется через add_filter.
  3. Упрощать контроль над контентом: Упрощение управления содержимым, особенно если необходимо изменить его логическую структуру.

Почему возникает проблема с многократной фильтрацией?

В вашем случае, если вы вызываете фильтр apply_filters('the_content', 'anything') многократно в цикле, это может привести к тому, что плагин, такой как Shareaholic, будет добавлять свои элементы несколько раз. Это происходит потому, что каждый вызов apply_filters будет применяться к текущему контенту, который уже может содержать ранее добавленные элементы.

Ваш цикл, описанный выше, вызывает функцию apply_filters несколько раз в рамках одной итерации, что приводит к неправильному поведению плагина. Каждый раз, когда apply_filters вызывается, Shareaholic будет добавлять свои ссылки, что считается избыточным.

Как оптимизировать ваш код?

  1. Вызов the_content один раз: Вместо многократного применения apply_filters, ограничьтесь вызовом the_content единожды в конце ваших действий в цикле. Это может выглядеть следующим образом:

    <?php while (have_posts()) : the_post(); ?>
       <?php function_for_post_banner(); ?>
       <?php get_template_part('templates/loop', 'switch'); ?>
       <?php function_attachements(); ?>
       <?php the_content(); // Вызовите 'the_content' один раз в конце ?>
    <?php endwhile; ?>
  2. Фильтрация только при необходимости: Поставьте фильтры и вызовы apply_filters туда, где они действительно нужны, чтобы избежать избыточной нагрузки.

  3. Убедитесь, что вы правильным образом используете add_filter: Применение фильтров должно происходить в файлах функций вашей темы или плагина, и оно должно быть четко оформлено, чтобы избежать путаницы.

Заключение

Фильтрация через the_content является мощным инструментом в WordPress, однако неправильное её применение может привести к неожиданным результатам, как в вашем случае с плагином Shareaholic. Оптимизация вашего кода с учётом вышеуказанных рекомендаций не только улучшит производительность вашего сайта, но и устранит проблемы с дублированием содержимого. Надеюсь, эти замечания помогут вам справиться с трудностями и наберитесь опыта в использовании WordPress и PHP!

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

Капча загружается...