워드 프레스 훅 : 자신 만의 훅 추가를위한 초보자 안내서

플러그인은 그만큼 WordPress를 확장하는 방법. WordPress가 입찰을 수행하는 것이 너무 쉬운 이유는 소스 코드에 흩어져있는 후크와 관련이 있습니다..


게시물이 게시되는 즉시 무언가를 원하십니까? 발췌 길이를 수정 하시겠습니까? 자신 만의 페이지 뷰 통계를 만들고 싶습니까? 올바른 고리를 찾는 것만으로도 충분합니다..

그러나 플러그인으로 동일한 작업을 수행하는 것은 어떻습니까? 후크는 WordPress에서만 사용되는 것이 아니라 본질적으로 자신의 작업에서 구현할 수있는 디자인 패턴입니다..

이 기사에서는 자신이나 다른 사람이 작업을 쉽게 수행 할 수 있도록 자신 만의 후크를 만드는 방법을 보여 드리겠습니다..

후크가 필요한 이유

멋진 갈고리가 될 수있는 방법을 보여주기 위해 실제 세계의 예를 살펴 보겠습니다. 고급 사용자 정의 필드. 이 플러그인을 사용하면 유연한 사용자 정의 데이터 필드를 게시물에 추가 할 수 있습니다. Google지도, 숫자 필드, 객관식 등에 대해 이야기하고 있습니다..

이 모든 것은 멋진 사용자 인터페이스를 통해 이루어지며, 프런트 엔드에서 get_field () 또는 the_field ()와 같은 함수를 사용하기 만하면됩니다. 여태까지는 그런대로 잘됐다.

사람들이 물건을 팔 수있는 도구를 만들고 가격에 대한 필드와 통화에 대한 필드를 제공한다고 가정 해 봅시다. 그러나 내부적으로 사용자는 어떤 통화로 표시하기로 선택했는지에 관계없이 항상 달러로 가격을 저장하려고합니다.

ACF (고급 사용자 정의 필드)에 후크가 없으면이 작업을 수행하기가 어려울 수 있습니다.이 필드를 저장하려면 ACF 외부의 메커니즘을 사용해야합니다. 다행히도 우리는 acf / save_post 동작. 이 조치를 사용하여 저장하기 전에 $ _POST 데이터를 수정하여 가격을 달러로 변환 할 수있는 완벽한 시간.

이것은 매우 실용적인 후크의 예이지만 다른 이유가 있습니다. 향후 교정 및 확장 성. 후크는 일종의 API와 같으며 방향을 알려줍니다. 말하자면 틀. 중요한 데이터를 저장하는 경우 필요에 따라 다른 사람이 데이터를 조작 할 수 있도록 자동으로 후크를 만들어야합니다. 예를 들어 응용 프로그램에 중요한 것을 표시하는 경우 이미지는 표시되는 이미지 수를 정의하는 데 사용할 수있는 필터를 사용합니다..

후크가 내부적으로 작동하는 방법

자체 후크를 만들려면 WordPress에서 내부적으로 수행하는 작업을 정확하게 수행합니다. do_action () 및 apply_filters () 함수를 사용하여 모든 후크 된 함수를 실행하십시오. WordPress 소스 코드로 돌아가서 어떻게 작동하는지 봅시다.

WordPress는 내부적으로 wp_trim_excerpt () 함수를 사용하여 발췌를 만듭니다. WordPress 4.1에서이 기능은 2542 행에서 시작하여 wp-includes / formatting.php에 정의되어 있습니다. 2560 행에주의를 기울이면 다음을 볼 수 있습니다.

$ excerpt_length = apply_filters ( ‘excerpt_length’, 55);

이것이 의미하는 바는 다음과 같습니다. excerpt_length 후크에 후크 된 모든 함수를 실행하고 최종 값을 리턴하십시오. 발췌 길이를 수정하는 3 개의 플러그인을 사용한다고 가정 해 봅시다. 그러면 어떻게됩니까? 이 기능을 한 곳에 모아 살펴 보자.

add_filter ( ‘excerpt_length’, ‘plugin_a_excerpt_modify’, 20);
plugin_a_excerpt_modify ($ length) {
$ length-10을 반환;
}

add_filter ( ‘excerpt_length’, ‘plugin_b_excerpt_modify’, 32);
plugin_b_excerpt_modify ($ length) {
리턴 104;
}

add_filter ( ‘excerpt_length’, ‘plugin_c_excerpt_modify’, 16);
plugin_c_excerpt_modify ($ length) {
리턴 20;
}

결국, 발췌 길이는 104 단어입니다. 필터는 우선 순위대로 실행됩니다. 따라서 플러그인 C의 기능이 먼저 실행됩니다. 다른 함수가 연결되지 않은 경우 길이는 이제 20 워드입니다. 다음으로 플러그인 A가 시작되고 길이가 10이됩니다. 마지막으로 플러그인 B의 무게가 측정되어 길이 104가됩니다..

do_action ()은 정확히 동일한 메커니즘을 사용하여 첫 번째 매개 변수로 정의 된 후크에 연결된 모든 함수를 실행합니다..

이 패턴은 완전히 둘러싸여 있으며 특별한 정의에 의존하지 않습니다. do_action ( ‘lol_hook’)을 원하는 곳 어디에서나 사용할 수 있습니다. 최악의 경우에는 lol_hook에 연결된 함수가 없습니다. 다시 말해, 우리는 이미 자체 후크를 만들 수있는 인프라를 가지고 있습니다!

우리 자신의 후크 만들기

위에서 언급했듯이 do_action () 및 / 또는 add_filter를 사용하고 확인해야합니다. 문서화. 이런 식으로 코더와 사용자는 실제로 그것이 있다는 것을 알게됩니다.

다음과 같이 데이터베이스에서 직접 가져온 최신 업로드 이미지의 갤러리를 작성한다고 가정 해 보겠습니다.

$ args = 배열 ​​(
‘post_type’=> ‘부착’,
‘post_status’=> ‘어떤’,
‘orderby’=> ‘데이트’,
‘주문’=> ‘DESC’,
‘posts_per_page’=> 10,
‘필드’=> ‘아이디어’
);
$ images = 새로운 WP_Query ($ args);
$ gallery = ‘[‘. ‘갤러리 ids ="’. implode ( ‘,’, $ images). ‘"’.’] ‘;
echo do_shortcode ($ gallery);

이 예에서는 날짜순으로 정렬되고 결과가 10 개로 제한된 이미지 만 검색하도록 쿼리를 만듭니다. fields 매개 변수를 사용하여 id 배열이 반환되는지 확인했습니다. 그런 다음이 정보를 사용하여 일반 WordPress 갤러리 단축 코드를 작성했습니다..

후크를 추가하기 위해 취할 수있는 두 가지 방법이 있습니다. $ args 배열을 정의하기 전에 다음과 같이 간단히 추가 할 수 있습니다.

$ posts_per_page = apply_filters ( ‘my_gallery / posts_per_page’, 10);

이 경우 배열에서 $ posts_per_page 변수를 사용해야합니다. 아마도 더 나은 해결책은 전체 배열을 수정하는 것입니다. 이렇게하면 다른 플러그인 (또는 나중에)이 갤러리에 카테고리, 태그 및 기타 제한을 추가 할 수 있습니다. 전체 코드는 다음과 같습니다.

$ args = 배열 ​​(
‘post_type’=> ‘부착’,
‘post_status’=> ‘어떤’,
‘orderby’=> ‘데이트’,
‘주문’=> ‘DESC’,
‘posts_per_page’=> 10,
‘필드’=> ‘아이디어’
);

$ args = apply_filters ( ‘my_gallery / query_args’, $ args);

$ images = 새로운 WP_Query ($ args);
$ gallery = ‘[‘. ‘갤러리 ids ="’. implode ( ‘,’, $ images). ‘"’.’] ‘;
echo do_shortcode ($ gallery);

그게 전부입니다. 다른 플러그인은 이제 my_gallery / query_args 후크를 사용하여 생성 된 갤러리의 기능을 수정할 수 있습니다.

명명에 대한 참고 사항 : 슬래시가 전혀 필요하지 않습니다. ‘my_plugin_query_args’또는 원하는 다른 형식을 사용할 수 있습니다. 플러그인과 플러그인이 제공하는 기능을 명확하게 설명하기 때문에 슬래시를 선호합니다..

결론

후크는 매우 강력하며 WordPress를 확장 할뿐만 아니라 자체 플러그인 또는 테마를 확장하는 데 사용할 수 있습니다. 당신은 응용 프로그램의 구석 구석에 선체와 갈고리를 추가하지 않도록주의해야합니다.

주문, 게시물 상태, post_type 및 posts_per_page에 후크를 별도로 추가하는 대신 전체 배열을 한 번에 수정할 수있는 필터를 추가했습니다. 다른 데이터 비트는 후크를 추가하는 것이 의미가 없을 수 있습니다..

더 많은 모듈 식 및 확장 가능한 응용 프로그램을 작성해 주셔서 감사합니다.!

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map