2014-04-25 2 views
2

내 목표는 'ajaxify'WordPress 검색입니다. 지금까지 사용자가 제출 한 쿼리 문자열을 PHP 처리기로 전달하는 AJAX 호출을 작성했습니다. 내가 고민하는 부분은 다음과 같습니다.WordPress의 AJAX 검색

1 PHP 처리기.

WordPress에는 이미 내가 사용하고 싶은 자체 PHP 검색 스크립트가 있습니다. 이것을 어떻게 PHP 처리기에 통합해야합니까? 쉬운 방법이 있습니까? 아니면 직접 검색 스크립트를 다시 작성해야합니까?

2 AJAX 응답

어떻게 다시 내 스크립트에 내 PHP 처리기에서 검색 결과를 통과해야합니까? 전체 HTML을 문자열로 전달할 수 있습니까? something like echo json_encode($html);

내 질문이 상당히 광범위하므로 정확한 코드 예제가 필요 없음을 알고 있습니다. 나는 내가 취해야 할 접근법에 대한 좀 더 높은 수준의 아이디어가 더 필요합니다.

미리 감사드립니다.

+0

데이터 전송에 문제가있는 경우 데이터를 전체 HTML이 아닌 JSON 객체로 다시 보내는 것이 좋습니다. 바이트와 ​​바이트를 저장합니다. 기본 제공 PHP 검색 스크립트 기능에 액세스 할 수 있습니까? 파일을 열어 자신의 코드를 복사하여 자신의 기능에 붙여 넣을 수 있습니다. AJAX/PHP의 광범위한 관점 (vBulletin을 많이 사용하여 작업 한 적이 없으며 WordPress로 작업 한 적이 없다)에서 생각해보십시오. – SeanKendle

+0

편집 해 주셔서 감사합니다! 내가 소유욕있는 대명사를 발견 했어야 했어!그리고 귀하의 의견을 주셔서 감사합니다. JSON 객체 접근 방식을 살펴 보겠습니다. – henrywright

+1

데이터를 가져 오면 JSON 객체 배열을 반복하고 javascript/jQuery를 사용하여 HTML을 만드는 것이 매우 간단합니다. 그렇게하면 클라이언트 쪽이 무거워서 처리를 제한하려는 쪽 (클라이언트 CPU/브라우저와 비교하여 전송)을 잘못 선택해야합니다. – SeanKendle

답변

1

Wordpress 검색 처리기는 실제로 처리기가 아닙니다. 그것은 WP_Query 클래스의 일부입니다. 기술적으로 검색 문자열을 구문 분석하고 관련 결과를 반환하는 몇 가지 특별한 방법이 있지만 그 중 아무 것도 수행 할 필요가 없습니다. 간단히과 같이 쿼리에 s 인수를 추가 게시물을 검색 할 수 워드 프레스를 사용하려면 다음과

$args = array(
    'post_type' => 'post', 
    'posts_per_page' => -1, 
    's' => 'foobar' 
); 
$query = new WP_Query($args); 

return json_encode($query); 

는 당신이 사람들이 당신의 데이터베이스에 자신의 쿼리를 제출 질수 있도록 protected function에 AJAX를 작성합니다. Wordpress는 SQL 주입을 막을 것이지만 여전히 미안한 것보다 안전합니다.

function SearchConstructor(value){ 
    function myAjaxCall(){ 
     $.ajax({ 
      // Your AJAX Call 
     }) 
     .done(function(msg) { 
      return msg; 
     }); 
    } 

    this.get = function(){ 
     return myAjaxCall.call(this); 
    } 
}; 

보호 기능에 대한 설명은 다음과 같습니다. a better blog post

+0

검색 핸들러에 대한 정보를 보내 주셔서 감사합니다. 이 경우,'global $ wp_query; return json_encode ($ wp_query);'내 PHP 핸들러에서? – henrywright

+0

보호 된 기능에 관해서 - 나는 자신의 db 쿼리를 제출하려는 사람들을 생각하지 못했습니다! 당신이 하나를 쓰는 방법의 빠른 예를 줄 수있는 기회? – henrywright

+0

글로벌 쿼리를 사용할 수 있습니다. 이상한 결과를 줄 수도 있지만 시도해 볼 수 있습니다! 보호 기능에 관해서는 내 대답에 추가 할 것입니다. –

2

저는 Dave's WordPress Live Search의 저자이기 때문에 여기에서 조금 도와 드릴 수 있습니다.

AJAX in plugins을 선호하는 방법을 확실히 알고 있어야합니다. 이렇게하면 코드가 유연하여 자신이나 다른 사람이 WordPress를 나중에 구성 할 수있는 다른 방법으로 작업 할 수 있습니다.

응답을 보내기 위해 json_encode()을 사용하는 대신 새로운 wp_send_json_successwp_send_json_error 함수를 사용하여 디버깅 할 때 사용할 수있는 약간의 상태 정보를 포함시키는 것이 좋습니다.

내 검색 플러그인이 MIT 라이센스를 가지고 있다는 것을 잊지 마세요. 코드를 자세히 읽고 어떻게했는지보십시오. 아마도 당신이하려고하는 것이 훨씬 더 복잡 할 수도 있지만, 그것으로부터 몇 가지 포인터를 얻을 수 있습니다.

행운을 빈다.

+0

'wp_send_json_success '와'wp_send_json_error'가 흥미 롭습니다 - 그들에게 강조를 해주셔서 감사합니다. – henrywright

+1

또한 지금 플러그인을 확인하는 중 ... 멋지고 도움이 될 것입니다. – henrywright