워드프레스 ajax 데이터 불러오기

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을 어떻게지정해야 좋을까요?

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기
워드프레스 에러 기술지원 서비스 전문가에게 맡기세요
  • 안녕하세요~^^

    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_구현

    고맙습니다.

  • 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보드의 발전을 위해서 간단한 질문이외에는 최대한 자제하고있는데.. 워드프레스에 대해 물어본곳이 여기밖에없습니다..

    항상 감사드립니다.

  • 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값을 불러오지 못하는거 같은데 맞을까요 ^^?

     

    항상 감사드립니다.

  • 안녕하세요~^^

    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 함수도 사용해보세요~

    고맙습니다.

좋은 정보와 인맥을 동시에, 워드프레스 사용자 단톡방 참여하기