form으로 WP_Query 하기 오류

빈 테마를 만들어서(functions.php와 style.css, index.php 뿐임), index.php 를 만들었습니다.

그리고 index.php 에 아래와 같은 내용을 넣었습니다. form을 만들어서 카테고리 id값을 받아 WP_Query에 넣어서 출력하는 형태입니다. 코드는 아래와 같습니다. 그런데 표시된 부분 (//<<<)에서 cat값이 정의되지 않았다고 오류가 계속 나네요.

 

Notice: Undefined index: cat in C:\Bitnami\wordpress\apps\wordpress\htdocs\wp-content\themes\runenmeal\index.php on line 13

 

form의 action이 문제인것 같다는 생각이 드는데 어떻게 잡아야될 지 모르겠네요. form을 입력 받아 현제 index.php에서 다시 받을거라 action="/"로 했는데, .오류가 뜨네요. action="<?php the_permalink(); ?>" 라고 해도 오류가 납니다.

뭐가 문제일까요..? ㅠ.ㅜ

 

감사합니다.

 

 

<body <?php body_class(); ?>>

<!-- 필터링 입력란 -->

<?php

if( $_GET['cat'] && !empty($_GET['cat']) ){       //<<<

$cat = $_GET['cat'];

}

 ?>

 

<div class="filter_container">

<form  action="/" method="get">

<label>지역</label>

<select name="cat">

<option value="">전체</option>

<option value="1">카테고리1</option>

<option value="2">카테고리2</option>

<option value="3">카테고리3</option>

<option value="4">카테고리4</option>

</select>

<button type="submit" name="">필터</button>

</form>

<?php

$args = array(

'post_type' => 'post',

'posts_per_page' => -1,

'cat' =>  $cat

);

 

$query = new WP_Query($args);

 

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

?>

  <h5><?php the_title(); ?>  </h5>

 

<?php endwhile; wp_reset_query(); ?>

 

</div>

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
  • 안녕하세요~^^

    코드를 입력하실 땐 그냥 텍스트로 입력하지 마시고 에디터 기능 중 '코드 스니펫 삽입' 기능으로 입력해주세요.

    올려주신 코드가 어땐 내용인지 알아보기가 쉽지가 않기 때문입니다 ㅎㅎ

    $cat 변수를 받는쪽을 아래처럼 바꿔보시겠어요?

    $cat = isset($_GET['cat']) ? sanitize_text_field($_GET['cat']) : '';

    고맙습니다.

  • 답변 감사합니다.

    $cat 값을 수정했는데도 똑같이 오류가 나네요.

    혹시나 해서, index.php 가 아닌, page-"해당페이지아이디".php 로 코드를 옮긴 후

    <form  action="<?php the_permalink(); ?>" method="get">

    위와 같이 action을 바꾼 뒤, 해보니 똑같이 오류가 생기네요. 다만, 이때, for select로 cat 값을 선택해서 값을 전달해주니, 오류가 사라지네요. 하지만 처음 해당 페이지에 들어가면 cat값 전달이 안되어 오류가 생기는 것 같은데..

    적어주신 코드를 보면, cat 값이 없으면 ' ' 설정이 되어 있는데도 그러네요. 혹시나해서 ' ' 이 아닌 '1' 등의 값을 해도 똑같은 오류가 생기네요.

    $cat = isset($_GET['cat']) ? sanitize_text_field($_GET['cat']) : '';

    이게 로컬에서 테스트를 하는 거라 이런 오류가 생기나 싶어서, 웹호스팅 된 계정을 통해 해당 내용을 테스트 하니 오류가 뜨지 않네요. form action 부분은 로컬에서 하면 안되는 건가요? ...ㅠ

    (수정) 아 아니네요. wp_config 에 define('WP_DEBUG', false); 로 해놔서 그렇네요.ㅠ. 똑같이 오류가 생기는군요..ㅠ

  • 에러가 발생되는 아래 코드 지우고

    <?php
    if($_GET['cat'] && !empty($_GET['cat'])){
    	$cat = $_GET['cat'];
    }
    ?>

    아래 코드로 적용해보신거죠?

    <?php
    $cat = isset($_GET['cat']) ? sanitize_text_field($_GET['cat']) : '';
    ?>

     

    로컬이나 웹호스팅이나 상관없습니다.

    주소창에 cat 부분이 있는지요?

  • 아 위에 위에 if 구문을 없애고 $cat 부분을 바꿔야 하는거군요. (제가 부족한게 많아서...ㅠ)

    이제 정상적으로 작동하네요.

    선생님! 감사합니다!!

워드프레스 에러 기술지원 서비스 전문가에게 맡기세요