programing

메뉴 제목에도 _title() 필터가 적용되는 이유는 무엇입니까?

lastmoon 2023. 3. 23. 23:06
반응형

메뉴 제목에도 _title() 필터가 적용되는 이유는 무엇입니까?

페이지 제목을 숨기기 위해 아래 기능을 만들었습니다.하지만 이 코드를 실행하면 메뉴 이름도 숨겨집니다.

function wsits_post_page_title( $title ) {
              if( is_admin())

        return $title;

    $selected_type  =   get_option('wsits_page_show_hide');

    if(!is_array($selected_type)) return $title;

    if ( ( in_array(get_post_type(), $selected_type ) ) &&  get_option('wsits_page_show_hide') ) 
    {
        $title = '';
    }
    return $title;
}
add_filter( 'the_title', array($this, 'wsits_post_page_title') );

Nikola 정답:

메뉴 항목에도 제목이 있어 필터링해야 합니다. : )

이것을 투고만으로 호출하고 메뉴에서는 호출하지 않게 하려면 , 다음의 체크 박스를 추가합니다.in_the_loop()- 그게 사실이라면, 게시물입니다.

함수의 첫 번째 행을 다음과 같이 변경합니다.

if( is_admin() || !in_the_loop() )

모든 게 잘 될 거야

약간 해킹이지만 loop_start에 액션을 추가하면 해결할 수 있습니다.

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' );

loop_start 액션 내부에_title 필터를 포함시킴으로써 메뉴 제목 속성을 덮어쓰지 않도록 합니다.

다음과 같은 작업을 수행할 수 있습니다.

고객님의 고객명function.php:

add_filter( 'the_title', 'ze_title');
function ze_title($a) {
    global $dontTouch;
    if(!$dontTouch && !is_admin())
        $a = someChange($a);
    return $a;
}

템플릿:

$dontTouch = 1;
wp_nav_menu( array('menu' => 'MyMenu') );
$dontTouch = 0;

필터 훅을 대상으로 검색하다가 클릭하게 된 검색 결과였기 때문에 이 답변을 게시합니다.the_title네비게이션 항목에 대한 필터 효과를 무시한 채.

제목 1 태그의 페이지 제목에 버튼을 추가하고 싶은 테마 섹션을 만들고 있었습니다.

다음과 같이 생겼습니다.

<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title ) . '</h1>'.PHP_EOL; ?>

그때 나는 이렇게 "호크인"하고 있었다.

add_filter( 'the_title', 'my_callback_function' );

다만, 상기의 타겟은, 문자 그대로, 콜 하는 모든 것입니다.the_title필터 후크, 여기에는 네비게이션 항목이 포함됩니다.

필터 훅 정의를 다음과 같이 변경했습니다.

<?php echo '<h1>' . apply_filters( 'the_title', $post->post_title, $post->ID, true ) . '</h1>'.PHP_EOL; ?>

거의 모든 전화는the_titlefilter는 파라미터1을 전달한다.$post->post_title및 파라미터 2는$post->ID. WordPress 코어 코드 검색:apply_filters( 'the_title'*직접 보게 될 거야

그래서 나는 특정 아이템을 대상으로 하고 싶은 상황에 대해 세 번째 파라미터를 추가하기로 결정했다.the_title필터링을 실시합니다.이렇게 하면, 다음에 적용되는 모든 콜백의 혜택을 계속 받을 수 있습니다.the_title기본적으로 후크를 필터링하는 동시에 다음 기능을 사용하는 대상 항목을 반감소할 수 있습니다.the_title필터 후크를 세 번째 파라미터로 설정합니다.

간단하다boolean파라미터:

/**
 * @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 );

원하는 대로 변수에 레이블을 지정합니다.이게 나한테 효과가 있었고, 내가 해야 할 일을 정확히 해.이 답변은 질문 내용과 100% 관련되지 않을 수 있지만, 이 문제를 해결하기 위해 제가 찾은 것입니다.이것이 비슷한 상황에 있는 누군가에게 도움이 되기를 바랍니다.

글로벌 $dont터치: 어떤 이유에서인지 솔루션이 작동하지 않았습니다.그래서 헤더에 있는 메뉴 주변의 필터를 제거했습니다.php:

remove_filter( 'the_title', 'change_title' );
get_template_part( 'template-parts/navigation/navigation', 'top' ); 
add_filter( 'the_title', 'change_title' );

그리고 모든 것이 좋다.

이걸 찾으시는 것 같은데요

function change_title($title) {
    if( in_the_loop() && !is_archive() ) { // This will skip the menu items and the archive titles
        return $new_title;              
    }    
    return $title;    
}
add_filter('the_title', array($this, 'change_title'), 10, 2); 

언급URL : https://stackoverflow.com/questions/13456521/why-does-the-title-filter-is-also-applied-in-menu-title

반응형