✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Правильная фильтрация контента публикации (и понимание применения_фильтров)

45

Время от времени, когда я работаю с уже существующим исходным кодом или выполняю аудит кода, я вижу, как другие модифицируют содержимое записи объекта записи следующим образом :

<?php

$post->post_content = $my_content;

В этот момент некоторые зайдут и сразу скажут, что вы делаете это неправильно. Я ненавижу эту фразу (и она даже встречается в кодовой базе WordPress, но я отвлекся).

Существуют способы использования других существующих функций WordPress API для очистки данных перед установкой их равными значению атрибута post_content, использование этих функций — не лучший способ сделать это.

Вместо этого мы все должны использовать apply_filters. Проблема? Кто-то не знает, кто-то не знает, как это работает, а кто-то не знает, как его использовать. То есть непонятно, как правильно фильтровать содержимое поста.

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

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

Правильная фильтрация контента постов

На данный момент я предполагаю, что вы знаете о WP_Post, его свойствах и о том, как их изменять с помощью различных функций API.

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

И происходит это следующим образом (и мы скоро вернемся к деталям):

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Но остаются вопросы, что эта функция делает, как она работает и когда ее использовать.

Что такое применить_фильтры?

Конечно, вы можете прочитать обо всем этом в ресурсах для разработчиков, и там дается следующее определение :

Вызовите функции, добавленные в хук фильтра.

Но это не всегда помогает. Я имею в виду, что мы можем читать документацию и все равно уйти в замешательстве, верно?

Подумайте об этом таким образом:

  1. Фильтр — это функция, которая принимает входные данные для обработки.
  2. Ввод обрабатывается на основе определения функции.
  3. Затем функция возвращает обработанное значение.

Что вы делаете с возвращаемым значением, зависит от вас, но когда вы применяете фильтр или вызываете apply_filters к части информации, вы говорите WordPress: «У меня есть эта информация, пожалуйста, примените фильтр, указанный этим ключом, и передайте результат обратно ко мне».

Неплохо, правда?

Как это работает?

Но есть одна часть вышеизложенного, которая приводит к вопросу. В частности, я упомянул, что «…пожалуйста, примените фильтр, идентифицированный этим ключом…», и идея ключа может сбивать с толку, особенно потому, что фильтр или действие или, в более общем смысле, хук могут быть идентифицированы тем, что называется тегом или тегом. ключ.

Это синонимы. Поэтому, когда вы видите тег или ключ в контексте хука, относитесь к ним как к таковым.

С учетом сказанного, вот как это работает:

  1. Функция apply_filters принимает два аргумента. Первый — это тег или ключ (в зависимости от того, как вы хотите его назвать), связанный с фильтром (читай: функцией), который вы хотите использовать для обработки работы, второй — это значение, которое вы хотите обработать в указанной функции.
  2. Фильтр сработает и вернет результат (или, помните, функцию, которую мы определили).
  3. Затем мы берем возвращенное значение и применяем его к любому желаемому свойству.

Так, например, вы, вероятно, увидите что-то подобное в чужой кодовой базе (или, возможно, даже в своей):

<?php

$post->post_content = apply_filters( 'the_content', $my_content );

И теперь, когда у вас есть немного контекста того, как это работает, вы поняли идею, верно?

Как мы это используем?

Это возвращает пост к первоначальному вопросу о том, как мы можем использовать apply_filters для post_content всякий раз, когда нам нужно вставить или обновить пост.

Допустим, у вас есть контент, который вы хотите применить (или добавить) к значению контента поста. Вы можете сделать что-то вроде этого :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = $new_content;

Но это плохая форма. Вместо этого вы делаете это :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

И вот как WordPress это делает.

Вывод

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

Но примеры для этого — содержание для другого поста.

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

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее