2013-12-23 3 views
2

나는 필터 기능을 사용하여 WordPress에 페이지를 구축하고 있습니다. 기본적으로 체크 상자를 클릭하면 데이터의 출력을 변경하고 싶습니다. 지금 가지고있는 것 :WordPress의 체크 박스로 출력 필터링하기

<form class="compo-filter"> 
    <input type="checkbox" name="compo-cat" value="indoor" onclick="if(this.checked){this.form.submit();}" />Indoor 
    <input type="checkbox" name="compo-cat" value="outdoor" onclick="if(this.checked){this.form.submit();}" />Outdoor 
    <input type="checkbox" name="compo-cat" value="men" onclick="if(this.checked){this.form.submit();}" />Men 
    <input type="checkbox" name="compo-cat" value="women" onclick="if(this.checked){this.form.submit();}" />Women 
    <input type="checkbox" name="order" value="order" onclick="if(this.checked){this.form.submit();}" />Show only competitions currently in progress 
</form> 

<?php 
    $today = date('Y-m-d'); 
    $args = array(
     'post_type' => 'competitions', 
     'posts_per_page' => 10, 
     'meta_key' => 'startdate', 
     'meta_compare' => '>=', 
     'meta_value' => $today, 
     'orderby' => 'startdate', 
     'order' => 'ASC' 
    ); 
    $args2 = array(
     'post_type' => 'competitions', 
     'posts_per_page' => 10, 
     'meta_key' => 'startdate', 
     'orderby' => 'startdate', 
     'order' => 'ASC' 
     ); 

    if ($_POST['order'] == 'order') { 
     $query = new WP_Query($args2); 
    } else { 
     $query = new WP_Query($args); 
    } 

    if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); ?> 

위의 해결 방법은 효과가 없으며 잘못된 점을 해결할 수 없습니다. 페이지가 다시로드되고 URL에 선택한 값 /?order=order이 표시됩니다.

답변

2

나는 문제가, 당신은 코드에서 $_POST을 사용하는 양식 방법으로 자리 잡고 있지만, 특정 형태 method = "post"을 넣어 당신이 $_POST 방법으로 작업을 얻을 수 있다고 생각합니다.

기본적으로 method 속성이 없으면 양식을 제출하는 동안 get 방법으로 이동합니다.

1

내 문제가 해결되었습니다. $ _POST 대신 $ _GET을 사용해야합니다.

+1

답장을 보내 주셔서 감사합니다. 장래에 사람들을 도울 수 있습니다. '$ _POST' (사용자가 볼 수있는 추악한 쿼리 문자열이 없으므로 일반적으로 더 바람직하다)를 사용하고자한다면,'

' ' –

+0

문자열을 공개적으로 볼 수 없기 때문에이 솔루션이 실제로 더 좋습니다. –

+1

좋은 소식입니다. 또 다른 일반적인 기술은 필요한 작업을 수행 한 다음 해당 페이지로 사용자를 리디렉션하는 처리기 (보이지 않는 페이지)에 양식을 POST하는 것입니다. 이는 게시물을 예를 들어 업데이트하는 경우에 특히 유용합니다. 이것에 대한 주된 이유는 보안이다. 그래서 만약 당신이 어떤 데이터베이스 쓰기 나 이와 유사한 것을하지 않는다면, 적용되지 않을 수도 있지만, 미래를 알면 좋을 것이다. –

0

이 문제는 양식 메서드에 있다고 생각합니다. 코드에서 $_POST을 사용하고 있지만 특정 양식을 넣으면 method = "post"$_POST 메서드에서 작동합니다.

기본적으로 메소드 속성이 없으면 양식을 제출하는 동안 get 메소드로 이동합니다.

내 문제가 해결되었습니다. $_POST 대신 $_GET을 사용해야합니다.

관련 문제