Как получить ID записи с помощью функции Add Filter

5 мая 2012 г., 09:26:14
Просмотры: 14.2K
Голосов: 4

Я разрабатываю плагин и пытаюсь понять, как добавить данные в конец записи на основе пользовательских мета-данных.

Пока что я сделал следующее:

add_filter('the_content', 'AppendMeta');

И вот сама функция "AppendMeta":

AppendMeta($content) {
    echo $content; // Выводим содержимое записи
    $PersonName = get_post_meta($post->ID, 'PersonName', true);
    echo 'Person: ' . $PersonName;
}

Этот код работает, если я заменю $post->ID на конкретный ID записи, но мне нужно, чтобы он работал для текущей просматриваемой записи. Как передать ID записи в качестве параметра? $post->ID в этом сценарии не работает, и я не могу понять почему.

3
Комментарии

Краткое примечание: при подключении к хуку фильтра ваша функция должна возвращать отфильтрованную переменную, а не выводить её.

Bainternet Bainternet
5 мая 2012 г. 13:24:17

Это соглашение или есть причина?

Talon Talon
5 мая 2012 г. 19:52:09

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

Bainternet Bainternet
6 мая 2012 г. 12:54:07
Все ответы на вопрос 2
2
10

Неважно, я выяснил, что можно использовать get_the_ID();.

Эта функция вернёт ID записи внутри фильтра the_content. Функция просто объявляет глобальный объект $post и возвращает его ID.

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    echo $content; // Выводим содержимое записи
    $PersonName = get_post_meta(get_the_ID(), 'PersonName', true);
    echo 'Имя: ' . $PersonName;
}

Если вы не хотите использовать get_the_ID(), вам просто нужно объявить объект $post глобальным перед его использованием:

add_filter('the_content', 'wpse51205_content')
wpse51205_content($content) {
    global $post;
    echo $content; // Выводим содержимое записи
    $PersonName = get_post_meta($post->ID), 'PersonName', true);
    echo 'Имя: ' . $PersonName;
}
5 мая 2012 г. 09:28:11
Комментарии

О да, полезно знать, вероятно, так надежнее.

Talon Talon
5 мая 2012 г. 19:51:18

get_the_ID() по-прежнему предназначен для использования только внутри цикла. На одиночных страницах он может работать нормально, но полностью надежным способом является доступ к переменной global $post, как я сказал в своем ответе.

Ashfame Ashfame
6 мая 2012 г. 09:48:08
1

the_ID() должен использоваться только внутри цикла, в противном случае на него нельзя полагаться. Лучше использовать объект $GLOBALS['post'] внутри вашего вызова функции.

5 мая 2012 г. 09:59:02
Комментарии

the_ID() также зависит от глобальной переменной $post.

DrLightman DrLightman
25 февр. 2020 г. 13:19:10