###実現したいこと
WordPressのwhileでJSONを返しています。
今回はこのwhileの中のコードを別のテンプレートに移したいと考えております。
しかしそのとき、返される配列の階層が合わなくなってしまうことについて質問させて頂きました。
宜しくお願い致します。
###該当のソースコード
AJAXで下記を読みます。おなじみの記事のループですが、結果を配列のJSONで受け取ります。
そしてこの記事データの階層は**「one、two、の次」という3つ目に入る**ことになっています。
今回はこの階層を変化させることなく、whileの中のコードを別のテンプレートに移すということを実現したいと考えております。
↓loop-post.php
PHP
1<?php 2if ( $the_query->have_posts() ) : 3 $return_array = []; 4 while ( $the_query->have_posts() ) : $the_query->the_post(); 5 6 // このwhileの中を別のテンプレートに移したい 7 $id = get_the_ID(); 8 $return_array['one']['two'][] = [ 9 'id' => $id, 10 ); 11 12 endwhile; 13 wp_reset_postdata(); 14endif; 15 16return json_encode($return_array);
※追記:one、twoは実際には変数で、oneには投稿タイプ、twoには日付が入ります。その結果は「実際のJSON」として後述させて頂きました。
###ためしたこと
まず別のテンプレート(post.php)にこのように移しました。
↓post.php
PHP
1 $post_array = []; 2 $post_array['one']['two'][] = [ 3 'id' => $id, 4 ); 5 return $post_array;
次が問題です。上の$post_arrayをwhileの中でまとめようとしてみたのですが、下記のようにまとめると、記事データの配列の階層が「one、two、の次」という3つ目ではなく、4つ目に入ることになってしまいます。
↓loop-post.php
PHP
1<?php 2if ( $the_query->have_posts() ) : 3 $return_array = []; 4 while ( $the_query->have_posts() ) : $the_query->the_post(); 5 6 $id = get_the_ID(); 7 $post_array = include locate_template( 'template-parts/post.php' ); 8 $return_array[] = $post_array; 9 10 endwhile; 11 wp_reset_postdata(); 12endif; 13 14return json_encode($return_array);
###質問内容
そこでお聞きしたいのが、「ためしたこと」にあるようにpost.phpとloop-post.phpとテンプレートを分けた状態にしつつ、最終的にjson_encodeの対象の配列は「該当のソースコード」のものと同じ配列を返すような方法です。
「ためしたこと」では4つ目に入ることになてしまっている記事データの配列を、「該当のソースコード」と同じ3つ目にしたいということです。
ご協力いただけましたら幸いです。
宜しくお願い致します。
###実際のJSON
配列がどのようにズレのるかについて補足させて頂きます。
「該当のソースコード」では次のJSONになります。これが目的の形です。
JSON
1{ 2 "product": { 3 "2019/06": [ 4 { 5 "id": 1, 6 }, 7 { 8 "id": 2, 9 }, 10 ], 11 "2019/05": [ 12 { 13 "id": 3, 14 }, 15 { 16 "id": 4, 17 } 18 ], 19 }, 20 "service": { 21 "2019/05": [ 22 { 23 "id": 5, 24 }, 25 ] 26 } 27}
一方「ためしたこと」では次のJSONになります。ループで作られた配列を使って再帰的に追加してしまうようで、上のものが次のようになります。
JSON
1[ 2 { 3 "product": { 4 "2019/06": [ 5 { 6 "id": 1, 7 } 8 ] 9 } 10 }, 11 { 12 "product": { 13 "2019/06": [ 14 { 15 "id": 1, 16 }, 17 { 18 "id": 2, 19 } 20 ] 21 } 22 } 23 { 24 "product": { 25 "2019/06": [ 26 { 27 "id": 1, 28 }, 29 { 30 "id": 2, 31 }, 32 ], 33 "2019/05": [ 34 { 35 "id": 3, 36 } 37 ] 38 } 39 }, 40 { 41 "product": { 42 "2019/06": [ 43 { 44 "id": 1, 45 }, 46 { 47 "id": 2, 48 }, 49 ], 50 "2019/05": [ 51 { 52 "id": 3, 53 }, 54 { 55 "id": 4, 56 } 57 ] 58 } 59 }, 60 { 61 "product": { 62 "2019/06": [ 63 { 64 "id": 1, 65 }, 66 { 67 "id": 2, 68 }, 69 ], 70 "2019/05": [ 71 { 72 "id": 3, 73 }, 74 { 75 "id": 4, 76 } 77 ], 78 }, 79 "service": { 80 "2019/05": [ 81 { 82 "id": 5, 83 } 84 ] 85 } 86 } 87]
###ご返信いただいたコードの場合
CHERRY様にご返信いただいたコードを試したところ、下記画像の左側(←)になる状態です。目的である「該当のソースコード」の結果は右側(→)です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。