맞춤 템플릿 / 테마를 사용하여 워드 프레스 사이트를 개발 중이지만 수고. 사용자가 버튼을 클릭 할 때 Ajax를 사용하여 함수를 호출하고 싶습니다. 한 페이지에 다음과 같은 버튼이 있습니다.
<p class="form-submit"> <input name="message_read" type="submit" class="submit button mark-as-read" value= "Mark as read" /> </p>
그리고 다음과 같은 jQuery / Ajax 함수가 있습니다.
jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", }, success: function (output) { console.log(output); } }); }); });
위의 함수는 wp-content/themes/my-theme/js/wp_ajax_calls.js
에 있습니다. 다음과 같이 사이트에 스크립트를 추가했습니다.
1)이 파일을 functions.php 파일에 추가했습니다.
wp_enqueue_script( "ajax calls", get_template_directory_uri() ."/js/wp_ajax_calls.js", array("jquery"), "1.0", true);
2) 헤더에 스크립트를 포함했습니다.
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
버튼을 그대로 클릭하면 console.log 문이 나타납니다. 내 이해를 돕기 위해 ajax 함수가 $ wpdb를 사용할 수있는 php 함수를 호출하기를 원합니다. 이 기능은 functions.php에 있습니다.
function mark_message_as_read() { global $wpdb; // do stuff. }
이것은 제가 혼란스러워하는 부분입니다. 두 가지 주요 질문이 있습니다.
1) 어딘가에 add_action () “이 있어야한다고 생각하지만 어디로 가야할지 모르겠습니다. 넣어야하는데 어떤 후크를 사용해야할지 모르겠습니다.
2) 또한, DB 쿼리를 위해 데이터 (메시지 ID)를 PHP 함수로 전달하고 싶습니다. 해당 함수에 인수를 전달하려면 어떻게해야합니까?
메시지를 설정하는 방식 때문에 if( isset($_POST["message_whatever"]) ) twentyfifteen_message_whatever();
와 같은 것을 사용하고 싶지 않습니다.
필요한 경우 더 많은 정보를 제공해 드리겠습니다. 도움에 미리 감사드립니다 !!
댓글
- 문서 a를 참조하세요. >.
답변
-
혼잡하지 않도록 하위 테마 만들기 다음에 테마를 업데이트 할 때 모든 변경 사항이 손실 될 수 있으므로 기존 테마의 코드입니다 ( 하위 테마 참조)
-
Ajax 요청에 값을 전달하는 방법은 다음과 같습니다.
jQuery(document).ready(function() { jQuery(".mark-as-read").click(function () { console.log("The function is hooked up"); jQuery.ajax({ type: "POST", url: "/wp-admin/admin-ajax.php", data: { action: "mark_message_as_read", // add your parameters here message_id: $(".your-selector").val() }, success: function (output) { console.log(output); } }); }); });
몇 가지 조사를 할 수 있습니다. Nonces에서도 앱에 보안 계층을 추가하려면 : https://codex.wordpress.org/WordPress_Nonces
-
마지막으로 요청을 처리하기위한 PHP 코드 (여기서도 실제 코드에서 임시 코드를 처리해야 함) :
// register the ajax action for authenticated users add_action("wp_ajax_mark_message_as_read", "mark_message_as_read"); // register the ajax action for unauthenticated users add_action("wp_ajax_nopriv_mark_message_as_read", "mark_message_as_read"); // handle the ajax request function mark_message_as_read() { $message_id = $_REQUEST["message_id"]; // add your logic here... // in the end, returns success json data wp_send_json_success([/* some data here */]); // or, on error, return error json data wp_send_json_error([/* some data here */]); }
댓글
- 감사합니다! 저는 ' 논스도 확실히 살펴볼 것입니다. : D