워드프레스 테마에 Ajax를 추가하는 방법
문제가 생겨서 며칠째 고민하고 있어요.간단한 ajaxPOST 함수를 사용하여 데이터를 MySQL 데이터베이스(WP 데이터베이스가 아님)로 전송하려고 합니다.
이 코드는, 투고 전에 확인할 필요가 있기 때문에, 테마내의 「single-post.php」내에 있습니다.
$.ajax({ url: 'library/functions/admin_checkuser.php',
data: {action: userID},
type: 'post',
success: function(output) {
alert(output);
}
});
단순히 변수를 "admin_checkuser.php" 스크립트로 전송하면 데이터베이스에서 액션을 수행하는 다른 스크립트가 호출됩니다.
admin_checkuser의 코드는 다음과 같습니다.
$userid = $_POST['action'];
echo $userid;//for testing
$oMySQL = new MySQL();
$query = "Select * FROM videotable WHERE uid = '$userid'";
$oMySQL->ExecuteSQL($query);
$bb = $oMySQL->iRecords;
$aa = $oMySQL->aResult;
echo $bb;
if ($bb == 0){
$query = "INSERT INTO videotable VALUES ('','$userid','true')";
$oMySQL->ExecuteSQL($query);
echo 'true';
exit();
}else{
$sharing = mysql_result($aa,0,"share");
echo $sharing;
exit();
}
근데 대본에 통화가 안 되는 것 같아요.이러한 스크립트는 WordPress 외부에서 테스트되고 작동하므로 WordPress에서 Ajax 호출을 차단하는 것이어야 합니다.그런데 "admin_checkuser.php"를 여러 개의 다른 폴더에 배치하려고 했지만 소용이 없었습니다.
잘 부탁드립니다.
내장된 Wordpress AJAX 요청을 사용하는 것이 훨씬 좋습니다.
그래서 당신의 테마에서functions.phpfile, 호출할 함수를 추가합니다.예:
function checkUser() {
$userid = $_POST['user']; //validation also :)
$oMySQL = new MySQL();
$query = "Select * FROM videotable WHERE uid = '$userid'";
$oMySQL->ExecuteSQL($query);
$bb = $oMySQL->iRecords;
$aa = $oMySQL->aResult;
echo $bb;
if ($bb == 0){
$query = "INSERT INTO videotable VALUES ('','$userid','true')";
$oMySQL->ExecuteSQL($query);
echo 'true';
exit();
} else {
$sharing = mysql_result($aa,0,"share");
echo $sharing;
exit();
}
}
그 후 내장된 AJAX 시스템에 connects를 사용하여 후크를 추가합니다.
add_action('wp_ajax_check_user', 'checkUser');
add_action('wp_ajax_nopriv_check_user', 'checkUser');
wp_ajax_nopriv_%s프런트 엔드에서 호출할 수 있습니다.
그리고 자바스크립트 파일에서 에이잭스 요청을 실행하세요
$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) {
alert(output);
});
한다면ajaxurl정의되지 않았습니다.템플릿 파일에 작성해야 합니다.이러한 방법은 동작합니다만, 다른 방법이 있습니다.
add_action('wp_head','ajaxurl');
function ajaxurl() {
?>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>
<?php
}
나머지는 워드프레스의 백엔드가 합니다.
AJAX 요청에서 전달된 액션을 수행하고 대응하는 액션을 찾습니다.`wp_ajax(_nopriv)_%s후크에 할당된 함수를 호출합니다.
또, 어느쪽인가에 통과합니다.$_POST또는$_GETAJAX 요청 유형에 따라 달라집니다.
AJAX 사용에 대한 자세한 내용은 Wordpress에서 확인할 수 있습니다.
ajax 콜의 URL을 확인해야 합니다.
상대 URL 대신 전체 URL을 사용할 수 있습니다.
테마 위치 때문에 URL이 잘못되었을 수 있습니다.당신의 아약스 코드가 당신의 테마 폴더에 있을 거예요
테마 디렉토리를 가져오는 몇 가지 워드프레스 함수가 있습니다.
예를 들어 이 페이지에서http://yourwebpage/test/그럼 에이잭스 콜이 여기로 갈 거야http://yourwebpage/test/library/functions/admin_checkuser.php여기가 잘못된 장소라고 생각합니다.
따라서 스크립트에 절대 URL을 추가해야 합니다.그리고 만약 그것이 당신의 테마에 있다면, 당신은 이 방법을 사용할 수 있습니다.get_template_directory_uri()이치노
여기를 참조해 주세요.http://codex.wordpress.org/Function_Reference/get_template_directory_uri
언급URL : https://stackoverflow.com/questions/10589018/how-to-add-ajax-to-wordpress-theme
'programing' 카테고리의 다른 글
| 다에서 다로 필드를 직렬화하는 장고레스트 프레임워크 (0) | 2023.07.22 |
|---|---|
| 장고에서 모든 요청 헤더를 가져오려면 어떻게 해야 합니까? (0) | 2023.07.22 |
| WooCommerce 미니 카트 위젯에서 카트 및 체크아웃 버튼 링크 변경 (0) | 2023.04.03 |
| JSON.Net 시리얼라이저가 JsonProperty를 무시합니까? (0) | 2023.04.03 |
| LINQ를 JSON으로 설정할 수 있습니까? (0) | 2023.04.03 |