Есть ли безопасный способ получить идентификатор сообщения внутри the_title()
?
add_filter('the_title', "change_post_title"); function change_post_title($title){ }
Я попытался использовать global $post
и get_the_ID()
, но в некоторых случаях это не сработает (например, на одной странице, где в the_title()
чтобы ссылаться на следующую запись. global $post
и get_the_ID()
будет ссылаться на единственный пост вместо сообщения, которое связано с.)
С get_page_by_title()
мне пришлось бы порождать несколько запросов, чтобы охватить все типы сообщений.
Должен ли я вернуться к пользовательскому запросу?
Некоторые фильтры в WordPress просто не удобны для пользователя и не всегда делают то, что хочется.
Фильтр the_title
будет применять изменения ко всем экземплярам get_the_title()
(который используется the_title()
). Таким образом, названия виджетов, связанные заголовки сообщений и заголовки ссылок, все это изменилось, что является проблемой, когда вам просто нужно настроить таргетинг на главную почту на одной странице, например
Недавно я столкнулся с этим Джошем Левинсоном в своем блоге, имея такую же проблему. Он предложил использовать действие loop_start
где вы проверяете, находитесь ли вы в основном запросе, и если вы используете, примените ваш фильтр the_title
. Если запрос не является основным запросом, просто удалите фильтр
Я внес несколько изменений в исходный код. Просто примечание, вам нужен php 5.3+, поскольку закрытие было введено только в php 5.3
add_action('loop_start', function ($q) { if($q->is_main_query()){ add_filter( 'the_title', 'modified_post_title', 10, 2); }else{ remove_filter('the_title','modified_post_title', 10, 2); } }); function modified_post_title($title) { global $post; ?><pre><?php var_dump($post->ID); ?></pre><?php }