jQuery(document).ready(function() {
jQuery("button").on("click" , function(){
jQuery.ajax({
type: "get",
datatype: "json",
url: "/wp-content/themes/Avada/test_1.php",
success: function(data){
jQuery("#text").append(data);
}
});
});
});
해당 게시판에 ajax를 불러와 추가기능들을 만드려고하는데요,
절대경로 또는 상대경로.php로 url을 지정하니
Direct script access denied.
이런식으로 접속불가 오류가나옵니다.
워드프레스에서 ajax url을 어떻게지정해야 좋을까요?
안녕하세요~^^
option 쪽에 저장되어 있는 데이터는 테이블이 다르기 때문에 쿼리를 다시 요청해주셔야합니다.
대신 KBContent 클래스를 사용해보시면 좋을 듯합니다.
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback(){
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}kboard_board_content WHERE board_id = '1'");
$additional_list = array();
foreach($results as $row){
$content = new KBContent();
$content->initWithUID($row->uid);
$additional_list['title'][] = $content->title;
$additional_list['table1'][] = $content->option->table1;
$additional_list['table2'][] = $content->option->table2;
$additional_list['table3'][] = $content->option->table3;
$additional_list['table4'][] = $content->option->table4;
$additional_list['table5'][] = $content->option->table5;
$additional_list['table6'][] = $content->option->table6;
$additional_list['table7'][] = $content->option->table7;
$additional_list['table8'][] = $content->option->table8;
$additional_list['table9'][] = $content->option->table9;
$additional_list['table10'][] = $content->option->table10;
}
wp_send_json($additional_list);
}
그리고 wp_send_json 함수도 사용해보세요~
고맙습니다.
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback(){
header('content-type: application/json; charset=utf-8');
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}kboard_board_content
WHERE board_id = '1'
");
$additional_list = array();
foreach($results as $row){
$additional_list['title'][] = $row->title;
$additional_list['table1'][] = $row->table1;
$additional_list['table2'][] = $row->table2;
$additional_list['table3'][] = $row->table3;
$additional_list['table4'][] = $row->table4;
$additional_list['table5'][] = $row->table5;
$additional_list['table6'][] = $row->table6;
$additional_list['table7'][] = $row->table7;
$additional_list['table8'][] = $row->table8;
$additional_list['table9'][] = $row->table9;
$additional_list['table10'][] = $row->table10;
}
echo json_encode($additional_list);
wp_die();
}
function.php 의 구조를 위와 같이 바꿔봤더니
title까지는 잘 출력이되지만
option에서 추가된애들은 값이 다 null로 출력이 됩니다.
option값을 불러오지 못하는거 같은데 맞을까요 ^^?
항상 감사드립니다.
function my_action_callback(){
header('content-type: application/json; charset=utf-8');
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}kboard_board_content
WHERE board_id = '1'
");
$additional_list = array();
foreach($results as $row){
$test = new KBContent();
$test->initWithUID($row->uid);
$tmp = array(
"title" => $test->title
);
$additional_list[] = $tmp;
echo json_encode($tmp);
};
콜백함수를 이런식으로 짠 후에
jQuery(document).ready(function() {
jQuery("#button_1").on("click" , function(){
jQuery.get('<?php echo admin_url('admin-ajax.php')?>',{
'action': 'my_action'
}, function(data){
jQuery("button").on("click" ,function(){
jQuery("#text").append();
});
});
});
});
이런식으로 불러왔음에도 아무것도 나타나지를 않습니다 어느부분이 잘못된걸까요?
<button id="button_1">test</button>
<p id="text">test</p>
html입니다.
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback(){
header('content-type: application/json; charset=utf-8');
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}kboard_board_content
WHERE board_id = '1'
");
$additional_list = array();
foreach($results as $row){
$test = new KBContent();
$test->initWithUID($row->uid);
$tmp = array(
"title" => $test->title
);
$additional_list[] = $tmp;
echo json_encode($tmp);
};
wp_die();
}
function.php에서 ajax관련 추가한 모든 액션입니다.
추가로 현재 문법에서 dataType="json"을 설정하려면 어떻게 해야할까요?
하단에 echo test를 짜주셨던것은 당연히 잘 나왔습니다.
응용하려고 하는데 쉽지않네요 ㅠㅠ
k보드의 발전을 위해서 간단한 질문이외에는 최대한 자제하고있는데.. 워드프레스에 대해 물어본곳이 여기밖에없습니다..
항상 감사드립니다.
안녕하세요~^^
test_1.php 등 파일을 직접 만들게 되면 다양한 문제가 발생될 수 있습니다.
1. 예제로 아래 코드를 테마의 functions.php 파일에 추가해보세요.
add_action('wp_ajax_my_action', 'my_action_callback');
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
function my_action_callback(){
echo 'test';
wp_die();
}
2. 아래 코드를 KBoard(케이보드)의 스킨 파일에 추가해서 확인해보세요.
jQuery(document).ready(function() {
jQuery("button").on("click" , function(){
jQuery.get('<?php echo admin_url('admin-ajax.php')?>',{
'action': 'my_action'
}, function(data){
console.log(data);
});
});
});
3. 크롬 브라우저의 개발자 도구(F12키)의 Console 창의 메시지를 확인해가며 테스트 해보세요.
자세한 내용은 매뉴얼을 확인해보시는게 좋을 듯합니다.
https://codex.wordpress.org/ko:플러그인에서_AJAX_구현
고맙습니다.