実装したい内容は以下のとおりです。
・content.phpのsaveボタンを押す
・数字がlocalStorage内の配列に入る
・callsajax();が動作する
・callsajax();でlocalStorageの配列をmesに入れる(ここが怪しい・・・)
・mesがpost__inに入り、対応IDのページが表示される
何故か対応IDのページが表示されない状態です。
以下説明が長くなり、申し訳ないですが、要約すると
WordPressでの「記事ループ生成」内のコード " 'post__in' => array($mes), " 部分が正常に動作していない原因を探している状態です。
$masは「ajax処理(ajax.js)」で、localStorageから受け取っています(受け取っているはずです)。
現時点のコードでは特にエラーは出ず。
私としては、受け取り方に問題があるのでは?、と思っているのですが、localStorageとajaxを使ったサイト構築の実例がないため、一つ一つ手探りの状態です・・・。
どなたか、その手の知見が豊富な方にお力をお借りしたく思います。
//----------------ajax準備(funcsion.php)-----------------
<?php ~~~ //Ajaxを利用するためリクエスト送信先URLをグローバル変数として定義 add_action( 'wp_head', 'add_demo_ajaxurl', 1 ); function add_demo_ajaxurl() { ?><?php } //-----------------------記事ループ生成--------------------- function ajax_get_new_posts() { $mes = $_POST[mes]; //表示個数 $returnObj = array(); //結果格納用配列 //記事取得条件 $args = array( 'post_type' => 'page', 'orderby' => 'date', 'order' => 'DESC', 'post_status' => 'publish', 'post__in' => array($mes),//☆これがうまく行かない・・・ ); //記事サブループ $posts = new WP_Query( $args ); if ($posts->have_posts()) { while($posts->have_posts()) { $posts->the_post(); $returnObj[] = array( 'post_content' => apply_filters('the_content',get_the_content()), ); } } wp_reset_postdata(); echo json_encode( $returnObj ); die(); } add_action( 'wp_ajax_ajax_get_new_posts', 'ajax_get_new_posts' ); add_action( 'wp_ajax_nopriv_ajax_get_new_posts', 'ajax_get_new_posts' ); //----------------------- callsajax処理(ajax.js)------------------------- function callsajax(){ console.log('動作2:'); var mes = JSON.parse(localStorage.getItem(storageKey)); mes=mes.map(Number); $.ajax({ type: 'POST', url: ajaxurl, //Ajaxを利用するためリクエスト送信先URL(グローバル変数で定義されている) //contentType: 'application/json', //dataType : "json",//エラーが出るのでコメントアウト data: { 'action' : 'ajax_get_new_posts', //呼び出す関数名 'mes' : mes, }, success: function( response ){ var jsonData = JSON.parse( response ); //JSON形式を配列に変換 var result_html = "<div>"; //表示用HTML $.each( jsonData, function( i, val ){ //配列ループ result_html = result_html + val['post_content']; }); result_html = result_html + "</div>"; var element = document.getElementById('ajax_demo_result'); //結果を表示する場所 element.innerHTML = result_html; //結果表示 } }); return callsajax; } //---------------------数字を配列(localStorage内)に登録(content.php)----------------------- <script type="text/javascript"> var save = document.getElementById('save151'); save.onclick = function() { if (saveData.indexOf(151) >= 0){ console.log("すでにあります"); }else{ console.log("151を配列に"); saveData.unshift(151); localStorage.setItem(storageKey, JSON.stringify(saveData)); callsajax(); }; }; </script><script> var ajaxurl = '<?php echo admin_url( 'admin-ajax.php'); ?>'; </script>
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。