add_filters () 및 apply_filter ()는 무엇을합니까?

이 기능이 작동하지 않는 이유에 대해 약간 혼란 스러웠습니다. 및 add_filter이 (가) 수행 중이므로 일반적인 팁도 좋습니다.

5 개의 이전 게시물을 표시하는 쿼리를 원합니다. 단일 게시물 페이지입니다. 현재 게시물의 날짜를 보내지 않고 이보다 일찍 게시물을 필터링하는 필터를 적용하고 싶습니다.

function sw_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } 

방법 이것을 올바르게 적용합니까? 새 WP_Query 객체를 인스턴스화하기 전에 단순히 add_filter 또는 apply_filter를 사용하는 것만으로는 제대로 작동하지 않는 것 같습니다.

미리 감사합니다!

편집 : 더 자세히 알아 보려면 이해하고 싶습니다. “$ date를 다른 함수에서 전달할 수 없으므로 필터에 변수를 전달하는 방법.

여기에 다른 함수가 있습니다 (워드 프레스 내의 ajax 호출이므로 먼저 $ _POST 변수를 통한 현재 페이지의 게시물 ID) :

function create_more_videos_sidebar() { $id = $_POST["theID"]; $args = array( "post_type" => "videos", "posts_per_page" => 1, "p" => $id ); $wp_query = new WP_Query($args); while ($wp_query->have_posts()) : $wp_query->the_post(); $do_not_duplicate = $post->ID; $date = get_the_date("Y-m-d"); endwhile; $args = array( "post_type" => "videos", "posts_per_page" => 5 ); add_filter( "posts_where", "sw_filter_videos_before" ); //don"t know how to pass $date $wp_query = new WP_Query($args); remove_filter( "posts_where", "sw_filter_videos_before" ); //do loop stuff $response = json_encode( array( "result" => $result ) ); header( "Content-Type: application/json" ); echo $response; exit; } 

댓글

  • 알겠습니다. 먼저, 먼저 필터를 추가하려는 훅이 정확히 무엇입니까? 중요한 점은 $date 변수가 $post 데이터를 사용하기 때문에 우리가 ' 루프의 내부 또는 외부 를 필터링하고 있습니다.
  • 이것이 wp 필터 지식이 부족한 것이 저를 놀라게하는 곳이라고 생각합니다. 나는 후크가 ' posts_where '라고 생각했고 주어진 문자열을 SQL 쿼리에 추가합니다. 내가 ' '는 루프 외부에 있다는 것을 알고 있습니다. ' s는 루프 생성의 전처리 부분에 있습니다. 모범 사례를 통해 내 목표를 달성 할 수있는 방법에 대한 제안이 있습니까?
  • 물론입니다. 🙂 어떤 날짜를 사용 하시겠습니까? 더 정확하게 질문 : 사용할 날짜를 어떻게 결정 하시겠습니까?

답변

무엇을 필터링하려고합니까? posts_before라는 필터 후크에 필터를 추가하려한다고 가정하겠습니다. 이 경우 add_filter()를 통해이 후크에 필터를 추가 해야합니다.

function mytheme_filter_posts_before( $where = "", $date) { $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_before", "mytheme_filter_posts_before" ); 

함수 이름을 변경했습니다. filter_posts_before()는 함수 이름이 너무 일반적이며 함수 이름 충돌을 일으킬 가능성이 매우 높습니다.

편집

그리고 그냥 명확히 :

  • apply_filters() 필터 후크 위치입니다. 코어 코드 에 의해 호출되며 에 사용됩니다. 테마 / 플러그인에 의해 대기열에 추가 된 모든 필터를 적용 및 core).
  • add_filter() 테마 / 플러그인 (및 코어)이며 대기열에 필터를 추가하여 코어별로 후크에 적용하는 데 사용됩니다.

편집 2

위의 의견에 따르면 후크는 posts_where입니다. 이제 콜백 함수를 다시 작성해 보겠습니다.

function mytheme_filter_posts_where( $where ) { // Here, we need to figure out how to // determine what date to use. In your // code example, you call get_the_date(), // but this function must be used inside // the Loop. Let"s try get_the_time() // instead. You"ll just need to come up // with a way to determine what post ID to use. $post = "some_post_id"; $date = get_the_time( "Y-m-d", $post ); $where .= " AND post_date < "" . $date . """; return $where; } // Add function to the filter hook add_filter( "posts_where", "mytheme_filter_posts_where" ); 

댓글

  • 설명해 주셔서 감사합니다. ' 필터 이름을 변경하겠습니다. 여전히 $ date 전달 방법을 ' 이해하지 않습니다. 이 변수에 대해 설명해 주시겠습니까? 감사합니다!
  • $date 변수는 무엇이며 어디에서 가져 오나요?
  • $ date는 내 다른 기능에서 제공되며 ' Ymd ' 형식으로 현재 게시물의 날짜입니다.
  • $date 전역 화 중입니까, 아니면 함수에서 반환합니까? 해당 함수를 게시 할 수 있습니까 ' 코드 , 또한?
  • Okey-cokey, ' 원래 게시물을 좀 더 자세한 내용으로 업데이트했습니다. 날짜를 세계화 할 수 있지만 그게 전적으로 필요한가요? 가능하다면 어떻게 든 전달하는 것이 최선이 아닐까요?

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다