質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2944閲覧

WordPressで非同期による指定期間内のアーカイブ記事出力法

sika

総合スコア52

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

1グッド

1クリップ

投稿2016/02/14 09:02

WordPressで開始日と終了日の期間を指定して
期間内に該当する記事一覧を出力させたいのですが、
記事データの出力までに以下の手順を構想しております


【構想している処理の手順】
①カレンダー形式のUIから日付をクリックして検索期間の"開始日"と"終了日"を選択(送信データ用に成形) → 完成
②送信された期間のデータを「calender.php」に送りdate_queryのパラメーター用に再成型 → 完成
③date_queryのパラメーターをもとにコールバック用に出力記事データを戻り値に設定 → 未完成
④「calender.php」で返された出力記事データをコールバック処理のユーザー定義関数returnArchiveの引数に入れる → 未検証


処理としては③が未完成の項目となるのですが、
「calender.php」の処理内容はwordPressのテンプレートに直接記述した場合は動作するのですが、外部ファイルとして設定した場合に動作させることが可能なのか?
そもそも④として構想しているWP Query関数の記事データを非同期として扱えるのか?
という疑問と検証方法に当たるエントリーが見当たらず途方に暮れております。


【JavaScript「calender.js」の非同期処理】

var box = {}; // 配列の初期化 //動的に取得して"年"・"月"・"日"に分解され格納されています box['before'] = [2016,02,01]; //開始日2016年2月1日 box['after'] = [2016,02,14]; //終了日2016年2月14日 //配列をjson形式に成形 var send_data = JSON.stringify(box); //「calender.php」へ指定期間のデータを送信 $.getJSON('calender.php', {data : box}, returnArchive); //コールバックの処理(確認用) function returnArchive(result){ console.log(result); //記事一覧にコールバックデータを生成 $('#posts').append(result); }

【PHP「calender.php」の受信側処理】

//POST送信されたデータを受け取る $array_data = $_POST['data']; //ヘッダーの設定 header('Content-type:application/json; charset=utf8'); //$after(開始日)と$before(終了日)に代入 $after = array('year' => $data['before'][0], 'month' => $data['before'][1], 'day' => $data['before'][2]); $before = array('year' => $data['after'][0], 'month' => $data['after'][1], 'day' => $data['after'][2]); //date_queryに期間を指定 $args = get_posts( array( 'posts_per_page' => -1, 'date_query' => array( array( 'after' => array( 'year' => $after['year'], 'month' => $after['month'], 'day' => $after['day'], ), 'before' => array( 'year' => $before['year'], 'month' => $before['month'], 'day' => $before['day'], ), 'inclusive' => true, ), ), )); //期間に該当する記事のタイトル一覧を出力 if( !empty( $args ) ) { foreach( $args as $post ) { setup_postdata( $post ); echo '<h1>'. the_title(). '</h1>'; } } //データは返せてません。

現段階まで作成している処理は上記の通りです。

構想している処理が動作可能なコードのご教授。
もしくは同様な工程が行われている参考となるテーマなどをご存じの方、
何卒お力添えをお願い致します。

dsk👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

サーバー側の PHP で JSON 形式で記事を出力し、クライアント側ではそれを .html() などでページに挿入することで実現可能です。
また、WordPress テンプレート外の PHP で記事にアクセスすることは可能です。

lang

1<?php 2// WordPress 読み込み(適宜変更してください) 3require_once '/wp-load.php'; 4 5$result = []; 6foreach ($args as $post) { 7 setup_postdata($post); 8 $result[] = [ 9 'title' => get_the_title(), 10 'date' => get_the_time(get_option('date_format')), 11 'permalink' => get_permalink(), 12 'content' => get_the_content(), 13 ]; 14} 15 16echo json_encode($result);

lang

1function HtmlSpecialChars(str) { 2 return str.replace(/&/g, "&amp;") 3 .replace(/</g, "&lt;") 4 .replace(/>/g, "&gt;") 5 .replace(/"/g, "&quot;") 6 .replace(/'/g, "&#039;"); 7} 8 9$.ajax({ 10 url: "calendar.php", 11 data: { 12 before: [2016, 2, 1], 13 after: [2016, 2, 14], 14 }, 15 dataType: "json", 16}).done(function (data) { 17 var html = ""; 18 // 各記事オブジェクトに対してループ 19 data.forEach(function (post) { 20 html += "<h1>" + HtmlSpecialChars(post.title) + "</h1>" 21 + HtmlSpecialChars(post.date) 22 + "<p>" + HtmlSpecialChars(post.content) + "</p>"; 23 }); 24 // ページの #posts に出力(適宜変更してください) 25 $("#posts").html(post); 26}).fail(function () { 27 // エラー処理 28});

P.S. カレンダー: calendar

投稿2016/02/14 11:15

編集2016/02/14 11:19
chitoku

総合スコア1610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問