programing

add_filter 대 add_action의 차이

bestprogram 2023. 6. 11. 11:03

add_filter 대 add_action의 차이

저는 제 기능을 검토하고 있었습니다.php 그리고 CODE A가 왜 사용하는지 궁금해합니다.add_action코드 버스가 작동하는 동안add_filter?
CODE A의 주요 목표는 특정 범주를 포함하거나 제외하는 입니다.
CODE B의 주요 목표는 특정 범주를 제외하는 것입니다.

사용하는 것이 정확합니까?add_actionCODE A용
그리고.add_filter코드 B를 위해?



코드 A: "최신 게시물" 대신 홈페이지의 특정 카테고리("특징"이라고 함)를 표시합니다.

function featured_category( $query ) {

    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'category_name', 'featured' );
        $query->set( 'category__not_in', array(60, 61) );
        $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'featured_category' );



코드 B: 검색 결과에 대해 "후원 게시물 범주" 제외

function search_filter($query) {

    if ( $query->is_search && $query->is_main_query() ) {
        $query->set('post_type', 'post');
        $query->set( 'category__not_in', array(60, 61) );
        $query->set( 'posts_per_page', 20 );
    }

    return $query;
}
add_filter('pre_get_posts', 'search_filter');

pre_get_posts작업이며 필터가 아닙니다. $query참조를 통해 전달되므로 CODE A는 아무것도 반환하지 않고 작동합니다.

CODE B 반품$query그러나 쿼리가 참조를 통해 전달되었기 때문에 다시 해당 코드가 작동합니다.후크의 반환 값이 아무 것에도 할당되지 않았습니다.

do_action_ref_array( 'pre_get_posts', array( &$this ) ); 

add_action그리고.add_filter다른 컨텍스트에서 사용되지만 코드는 동일합니다(add_action의 별칭입니다.add_filter게시된 두 코드 세트가 모두 작동하지만 올바른 사용법은add_action.

언급URL : https://stackoverflow.com/questions/26458037/difference-between-add-filter-versus-add-action