이 기능이 작동하지 않는 이유에 대해 약간 혼란 스러웠습니다. 및 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; }
댓글
답변
무엇을 필터링하려고합니까? 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, ' 원래 게시물을 좀 더 자세한 내용으로 업데이트했습니다. 날짜를 세계화 할 수 있지만 그게 전적으로 필요한가요? 가능하다면 어떻게 든 전달하는 것이 최선이 아닐까요?
$date
변수가$post
데이터를 사용하기 때문에 우리가 ' 루프의 내부 또는 외부 를 필터링하고 있습니다.