• Модератор Yuri

    (@yube)


    Беру помощь клуба.
    Задача простая, как три копейки: к заголовку, выводимому функцией the_title(), добавить нечто при помощи плагина. Поскольку фильтр ‘the_title’ находится внутри функции get_thе_title(), а не the_title(), то всё, что добавляется через него, вылазит где надо и где не надо, причем второго гораздо больше. И это, судя по всему, без побочных вызовов the_title().
    Попытка приспособить как-нибудь is_main_query() ни к чему не привели.
    Я пока не придумал ничего лучше, чем выяснять у debug_backtrace() «кто спрашивает?» Это настолько не по-вордпрессовки, что аж страшно, что кто-то случайно увидит 🙂

    Что можете посоветовать?

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • проверка на !in_the_loop() не подойдет?

    еще вариант:

    
    function make_custom_title( $title, $id ) {
        // Your Code Here
    }
    
    function set_custom_title() {
       add_filter( 'the_title', 'make_custom_title', 10, 2 );
    }
    
    add_action( 'loop_start', 'set_custom_title' );
    

    или так:

    
    /**
     * @param String $title
     * @param Int $object_id
     * @param bool $theme
     *
     * @return mixed
     */
    function filter_the_title( String $title = null, Int $object_id = null, Bool $theme = false ) {
    
        if( ! $object_id ){
            return $title;
        }
    
        if( ! $theme ){
            return $title;
        }
    
        // your code here...
    
        return $title;
    
    }
    
    add_filter( 'the_title', 'filter_the_title', 10, 3 );
    

    или

    
    add_filter( 'the_title', 'nine11day_modify_post_title' );
    function nine11day_modify_post_title( $title ) {
    	if ( is_page() && in_the_loop() && $title == 'Existing Title' )
    		$title = '<span>Existing</span> Title';
    	return $title;
    }
    

    короче каждый в данной ситуации выкручивается, как может 🙂

    Модератор Yuri

    (@yube)

    проверка на !in_the_loop() не подойдет?

    Частично. В виджете произвольного меню уже не лезет. Осталось только в «Комментарии…» и навигации следующий-предыдущий пост.
    🙁

    СПАСИБО!

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

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

    Модератор Yuri

    (@yube)

    Тоже вариант. Но к сожалению, нет гарантии, что the_title() будет всегда первой, кто вызвал get_the_title(). Да и на страницах архивов второй и далее посты останутся без «подарочка». Хотя, наверно, можно включать фильтр на хуке ‘loop_start’.

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «the_title» закрыта для новых ответов.