itsource

워드프레스에서 apply_filters()를 적용하기 전에_filter()를 추가해야 합니까?

mycopycode 2023. 9. 14. 23:14
반응형

워드프레스에서 apply_filters()를 적용하기 전에_filter()를 추가해야 합니까?

워드프레스 플러그인을 이해하려고 합니다.

apply_gettext('gettext', $recations->gettext($text), $text, $domain );

워드프레스의 모든 코드를 찾고 있지만 찾을 수 없습니다.

add_filter( 'gettext', ......);

이 플러그인에 대한 add_filter가 없는 이유는 무엇입니까?아니면 내가 놓친게 있나요?다음과 같습니다.

do_action(wp_loaded');

찾을 수 없습니다.

add_action(wp_loaded), ......;

apply_filters는 '이 이름을 가진 필터가 있으면 이 매개 변수를 사용하여 첨부된 콜백을 실행하십시오'와 같습니다.만약 없다면,add_filter그 이름에 대해서는, 그것은 그와 함께 실행될 필터가 없다는 것을 의미합니다.apply_filters지금 전화를 드립니다.

마찬가지입니다.do_action그리고.add_action.

저도 PHP - WordPress 스택 초보자이지만, 제가 이해한 바로는 그렇습니다.

플러그인이 호출합니다.apply_filters가진 것도 없이add_filter그들의 코드는 웹사이트 사용자들이 그들의 플러그인에 사용자 정의 로직을 추가할 수 있도록 하는 것입니다.당사 - 사용자는 자체 기능을 추가하여 사용할 수 있습니다.add_filter우리의 기능을 등록할 수 있습니다.

예를 들어 이 코드 조각은 플러그인에서 가져온 것입니다.보통은 모든 제품을 보여주지만 특정 제품을 보여주지 않는 방법을 제공합니다.

// Plugin's

if (apply_filters( 'plugin_show_products', true, $product->get_id() ) ) {
    $this->show_products();
}

따라서, 사용자가 사용자 정의를 원하는 경우,다음과 같이 자체 기능을 추가할 수 있습니다.functions.php)

// Our custom changes
function my_own_changes($boolean, $product_id) {
    if ( $product_id === 5 ) return false;
    return true;
}
add_filter( 'plugin_show_products', 'my_own_changes', 10, 2 );

이 뜻은 다음과 같습니다.플러그인은 정상적으로 동작하지만, 제 사이트의 경우 ID가 5인 제품은 표시되지 않습니다!

플러그인이나 테마에서 이런 종류의 코드를 발견했습니다.apply_filter반드시 존재하지 않고 사용됩니다.filter아니면add_filter

이 경우에, 어디서apply_filters필터 없이 사용됩니다. 실행할 위치에서 함수를 다시 호출해야 합니다.예를 들어, 테마의 머리글에 있습니다.

다음은 에서 다시 호출되는 함수에 사용되는 적용 필터의 예입니다.header.php

if ( ! function_exists( 'header_apply_filter_test' ) ) {

    function header_apply_filter_test() {

        $filter_this_content = "Example of content to filter";

        ob_start();

            echo $filter_this_content; 

        $output = ob_get_clean();

        echo apply_filters( 'header_apply_filter_test', $output );//used here 
    }
}

지금은header.php파일, 어디에도 연결되어 있지 않기 때문에 이 함수를 호출해야 합니다.이 경우 헤더에 출력을 표시하려면 다음과 같이 함수를 호출합니다.

<?php  header_apply_filter_test(); ?>

이 코드를 후크로 작성하면 헤더에 출력을 표시하는 것과 같은 작업을 수행할 수 있습니다.

add_filter('wp_head', 'header_apply_filter_test');

if ( ! function_exists( 'header_apply_filter_test' ) ) {

        function header_apply_filter_test() {

            $filter_this_content = "Example of content to filter";

            ob_start();

                echo $filter_this_content; 

            $output = ob_get_clean();

            echo $output; 
        }
    } 

이 두 번째 옵션의 경우 apply_filters를 사용하여 콜백 함수를 호출할 수 있습니다.header_apply_filter_test()필터가 존재하기 때문입니다.

따라서 제가 보기에는 어느 쪽이든 효과가 있기 때문에 핵심은 활용 사례입니다!

언급URL : https://stackoverflow.com/questions/5401404/do-i-have-to-add-filter-before-apply-filters-in-wordpress

반응형