WordPress에서 Ajax 호출 및 JSON을 관리하는 방법


13

jQuery를 통해 액세스하려는 사용자 지정 게시물 유형이 있습니다-JSON을 사용하는 것이 좋습니다.

첫 번째로 먼저. 반환 / echos json 함수를 작성하는 것은 쉽지만 jquery를 통해 어떻게 액세스합니까?

Mike 가이 질문에 쓰듯 , 내가 이해하는 한, 워드 프레스 루트에 넣습니다. PHP 파일 이름을 사용하여 액세스 할 수 있습니까?하지만 이것이 권장됩니까? 오히려 플러그인 폴더 안에 넣습니다.

워드 프레스 코덱을 읽으려고했지만 관리자 페이지가 아니더라도 모든 아약스 호출을 admin-ajax.php에 게시 할 때 아약스 호출이 처리되는 방식이 나를 혼란스럽게합니까?

누군가 내가 겪고있는 문제를 바로 잡을 수 있습니까?

/폭풍

편집하다

내가 가진 문제는 워드 프레스에서 아약스 호출이 어떻게 이루어 졌는지, 그리고 PHP와 js 코드를 배치하여 호출을 처리 / 처리하는 방법을 이해하는 것이 었습니다.

내가 링크 한 다른 질문에서 파일을 wp root에 배치하는 함수를 만들었습니다. 그러나 이제는 wp_ajax_ (nopriv _) [action] 사용법을 배웠으며 내가 만든 json에 효과적으로 액세스 할 수 있습니다. 남아있는 문제는 전화를하기 위해 JS를 배치 해야하는 곳입니다. 나는 플러그인의 js 파일에 배치하고 싶지만,이 페이지에 표시 할 수있는 한, 아니 내가 PHP를 사용하여 반향 그래서 관리자 사이트에 ajaxurl가 정의되어 있지 않습니다.

echo admin_url('admin-ajax.php');

그래서 질문은이 PHP를 자바 스크립트와 어떻게 결합 해야하는지, 그리고 파일이나 스크립트가 아닌 것으로 보아 어떻게 대기열에 넣어야합니까?


좀 더 설명적인 제목을 제공하기 위해 질문의 제목을 편집하고 싶지만, 읽은 후에도 여전히 귀하의 질문이 100 % 확실하지 않습니다. 사용자 정의 게시물 유형과 관련이없는 JSON 피드에 액세스하는 방법을 단순히 묻고 있습니까 (CPT가 실제로 질문으로 가져 오지 않습니까?) 루트에 있지 않은 것이 중요합니까? 관리자 기능입니까? 당신이 어려움을 겪고있는 기술적 접근과 더불어 최종 사용자의 관점에서 실제로 달성하려는 것을 설명한다면 도움이 될 것입니까?
MikeSchinkel

예, 제목이 가장 설명 적이 지 않다는 것에 동의 할 수 있습니다. 나는 처음에 더 나쁜 것을 게시했기 때문에 뭔가를 넣었습니다. 추가 정보가있는 게시물을 수정했습니다.
스톰

내가 좋아하는 json-api 플러그인은 실제로 커스텀 포스트 유형을 다루지 않기 때문에 방금 넣은 커스텀 포스트 유형.
Storm

답변:


17

아약스 핸들러

실제로 Ajax 핸들러가 wp-admin/디렉토리 에 있다는 것은 약간 혼란 스럽지만 , 관리자가 아닌 요청에도 사용할 수 있습니다. 그런 다음 wp_ajax_nopriv_[action]normal 대신 후크에 대한 핸들러를 등록하십시오 wp_ajax_[action]. 이 경우 로그인하지 않은 사용자의 요청이 이미 50 행 주위에 페이지를 남겨두기 때문에 의 첫 번째 행만admin-ajax.php 따라야 합니다 .

따라서 후크에 대한 함수를 등록 하면 매개 변수를로 설정하여 wp_ajax_nopriv_get_custom_post_data요청하면 호출됩니다 . 핸들러 끝에서 직접 호출 하십시오. 그렇지 않으면 기본값 이 리턴됩니다. 또한 로그인 한 버전을 등록하십시오 (동일한 처리기 기능에 문제 없음). 사이트에 로그인하면 연결 이 끊어 지지 않기 때문 입니다.admin-ajax.phpactionget_custom_post_datadie()die(-1)wp_ajax_get_custom_post_datanopriv

자바 스크립트로 서버 측 구성

admin-ajax.phpURL 과 같은 서버 측 구성 데이터를 전송하는 요령 은 wp_localize_script()입니다. 페이지 상단에 포함될 키와 값의 배열을 전달합니다. 이것은 원래 지역화 가능한 문자열을 위해서만 만들어졌지만 구성 데이터를 전달하는 데 사용할 수도 있습니다.

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_config핸들 이름 (나중에 큐에 storm_config넣으 려는 경우) 은 데이터를 포함 할 Javascript 객체의 이름입니다. 따라서 정적 Javascript 파일은과 같은 줄을 포함 할 수 있습니다 jQuery.post(storm_config.ajaxurl, ...).

비슷한 질문에 대한 bueltge의 답변 도 참조하십시오 .

플러그인 디렉토리의 정적 자바 스크립트

자체 플러그인 디렉토리에서 정적 Javascript 파일을로드하려면을 사용하십시오 wp_enqueue_script(). 다음과 같이 보일 것입니다.

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

어디에서 storm_json다시 핸들 이름입니다, 당신은 파일에 대한 링크, 다음 의존성 (수 있습니다 제공 null), 다음 업데이트에 브라우저 캐시를 이길 요청 이후에 추가 될 버전 번호를.


좋은 대답입니다. 이것은 내가 궁금했던 것이었고, 나는 그것이 효과가있는 것 같습니다. 이제 /wp-admin/admin-ajax.php?action=[action]에 액세스하여 json 결과를 얻을 수 있습니다. 내 문제는 이제 js가 ajax 호출을 수행하는 위치입니다. echo admin_url ( 'admin-ajax.php')을 넣어야하기 때문에; URL로 내 플러그인 js 파일에 넣을 수 없습니다. 어떻게 대기열에 넣을 수 있습니까? 스크립트를 페이지 중간에 인쇄하고 싶지 않습니다.
스톰

@Storm :로 대답을 넓혔습니다. wp_localize_script()서버 측에서 브라우저로 구성 데이터를 보내는 데 사용할 수 있습니다. (작은 팁 : @사용자 이름 을 추가 하면 해당 사용자가 회신 알림을 받게됩니다. 따라서 @Mike: I updated the title사용자의 의견이 표시되는지 확인하십시오)
Jan Fabry

고마워요 1 월. 이제 전체 패키지를 이해한다고 생각합니다. 나는 그것을 완전히 이해하기 위해 모든 것을 약간 다루어야 할 것이지만 당신은 큰 도움이되었습니다! 답변이 수락되었습니다 =) btw 고맙습니다 @ 참고. 그러나 지금 귀하의 답변에 대해 언급하고 있지만 여전히 경고가 표시됩니까?
Storm

@Storm : 그렇습니다. 경고는 댓글을 달고있는 질문이나 답변의 작성자에게 전달되며, 추가로 @ 주석에서 언급 한 다른 참가자에게 전달 될 수도 있습니다. 따라서 "무료"라는 알림을 받았지만 포함하지 않으면이 메시지에 대한 알림을받지 못합니다. Stack Exchange 네트워크의 일반 메타 사이트에 대한 자세한 설명이 있습니다.
Jan Fabry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.