まだ経験が浅く、初歩的なご質問かもしれませんが、恐れ入りますが、
解決方法がわかるようでしたら、ご教示頂けますと助かります
前提・実現したいこと
・wordpress、PHP、JQuery(ajax)、MYSQLを使って検索サイトを構築しています。
・URLのGETパラメータから取得した変数をJQuery(ajax)へ渡したいのですが、
渡せずにNULLとなっている状況です。
・wordpressでのfunctions.phpからJquery(ajax)への変数渡しを行いたい。
発生している問題・エラーメッセージ
【処理の流れ】
①.A画面表示時にURLのGETパラメータから変数取得
変数:lastnanme、firstname
関数:functions.php(cc_get_firstname_handler、cc_get_lastname_handler)
②.取得した変数をJQuery(ajax)へを渡す。
関数:functions.php(add_files)
引き渡し先:/js/ajax_table.js
③ajax_table.jsで取得確認
上記③において、IEのコンソールログを確認した結果、
lastnm、firstnmがNULLとなっています。★箇所です。
ここに変数をセットする方法がわからなくて困っています。
疑っている点として、「functions.php(cc_get_firstname_handler、cc_get_lastname_handler)」より先に「functions.php(add_files)」が実行されることにより、変数が取得できていない可能性があると思っています。
該当のソースコード
php
1//functions.php 2 3//クエリ変数登録 4function add_meta_query_vars( $public_query_vars ) { 5 $public_query_vars[] = 'lastname'; 6 $public_query_vars[] = 'firstname'; 7 return $public_query_vars; 8} 9add_filter( 'query_vars', 'add_meta_query_vars' ); 10 11//lastname取得 12function cc_get_lastname_handler() { 13global $g_lastname; 14 $g_lastname = htmlspecialchars(get_query_var( 'lastname', 'default' )); 15 return $g_lastname; 16} 17add_shortcode("cc_get_lastname", "cc_get_lastname_handler"); 18 19//firstname取得 20function cc_get_firstname_handler() { 21global $g_firstname; 22 $g_firstname = htmlspecialchars(get_query_var( 'firstname', 'default' )); 23 return $g_firstname; 24} 25add_shortcode("cc_get_firstname", "cc_get_firstname_handler"); 26 27// Jquery(ajax_table.js)読み込み、g_lastname、g_firstname変数をJQuery渡し(うまく渡せてない) 28function add_files() { 29global $g_lastname; 30global $g_firstname; 31 32$ex_array = array( 33 'lastnm' => $g_lastname, 34 'firstnm' => $g_firstname 35); 36 37//var_dump($g_lastname); 38//var_dump($g_firstname); 39 40 // WordPress本体のjquery.jsを読み込まない 41 wp_deregister_script('jquery'); 42 wp_enqueue_style('bootstrap', 'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css',array(),false, false); 43 wp_enqueue_style('bootstrap4', 'https://cdn.datatables.net/1.10.18/css/dataTables.bootstrap4.min.css',array(),false, false ); 44 45 wp_enqueue_script( 'jquery1', 'https://code.jquery.com/jquery-3.3.1.js',array(),false, true ); 46 wp_enqueue_script( 'jquery2', 'https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js',array('jquery1'),false, true ); 47 wp_enqueue_script( 'jquery3', 'https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js',array('jquery2'), false, true ); 48 wp_enqueue_script( 'script1', get_stylesheet_directory_uri() . '/js/ajax_table.js', array( 'jquery3' ),false, true ); 49 wp_localize_script( 'script1', 'my_script_vars',$ex_array); 50} 51 add_action( 'wp_enqueue_scripts', 'add_files',100 ); 52 53//ajaxから呼び出す関数 54function get_record(){ 55 56global $wpdb; 57//SQLは省略してます。 58 $sql = "SELECT 59 lastname, 60 firstname 61 from test"; 62 63var_dump($g_lastname); 64var_dump($g_firstname); 65var_dump($sql); 66 67$result = array(); 68$result = $wpdb->get_results($sql,ARRAY_A); 69echo json_encode(['data'=>$result],JSON_UNESCAPED_UNICODE); 70var_dump($result); 71die(); 72} 73 74add_action( 'wp_ajax_get_record', 'get_record'); 75add_action( 'wp_ajax_nopriv_get_record', 'get_record'); 76} 77
JS
1console.log('コンソール出力確認'); 2//★ここで変数がNULLとなっていることを確認。 3console.log(my_script_vars); 4 5 6//画面表示に読み込まれる 7$(document).ready(function() { 8 $.extend( $.fn.dataTable.defaults, { 9 language: { 10 url: "https://cdn.datatables.net/plug-ins/9dcbecd42ad/i18n/Japanese.json" 11 } 12 }); 13 $('#testtest').dataTable ({ 14 lengthMenu: [ 100, 200, 300, 400, 500 ], 15 // 件数のデフォルトの値を50にする 16 displayLength: 200, 17 dom: 18 "<'row'<'col-sm-8 col-md-4'i><'col-sm-8 col-md-4'f>>" + 19 "<'row'<'col-sm-12'tr>>" + 20 "<'row'<'col-sm-10 col-md-6'p>>", 21// dom: '<"top"fil>rt<"bottom"p><"clear">', 22 order: [ [ 1, "desc" ],[ 4, "asc" ] ], 23 "ajax" : { 24 "url": ajaxurl, 25 "data" :{ 26 "action" : 'get_record', 27 }, 28 "datatype": "json" //受け取りデータの種類 29// "dataSrc": "" 30 }, 31 "columnDefs":[ 32 {targets:0,title:'苗字',data:'lastname'}, 33 {targets:1,title:'名前',data:'firstname'}, 34 ] 35 36}); 37 38});
試したこと
console.logでどこまで進んでいるかを確認しましたが、★部分でつまづいています。
補足情報(FW/ツールのバージョンなど)
・WordPress 5.2
・PHP 7.2.x
回答1件
あなたの回答
tips
プレビュー