WordPressの質問(q10306916)の続
表示するコンテンツに関するコードを書いているのですが、回答の日時を表示するところで悩んでおります。
PHP のみで書く方法と SQL の検索条件から出力する方法の2つがあるようですが、質問に対する回答の日時を取得したい場合、後者しか使えないのではないかと思いました。
ただ欠点があるようで、表示上の意味はあってもデータとしての意味が損なわれるとアドバイス頂いております。
現在日付から引いて、その結果をマッピングして漏れたらただの日付を表示するのが最適ではないかと教えて頂いたのですが、具体的なコードの書き方が分からず SQL の検索条件から出力する方法を調べながら書いてみました。
アドバイスお願い致します。
※自作コード
/* 回答タイトルとスタンプ画像なし(回答掲示板) */
function bbs_answer_confirm()
{
// 新しいセッションを開始、あるいは既存のセッションを再開する
session_start();
// 何もせず終わる処理
if (empty($_SESSION['text'])) {
exit;
}
// $wpdbでSQLを実行
global $wpdb;
/* ここから(1) */
$unique_id = $_SESSION['unique_id'];
$sql = 'SELECT * FROM sortable WHERE unique_id = %s';
$query = $wpdb->prepare($sql, $unique_id);
$rows = $wpdb->get_results($query);
// rows[0]は配列の最初の要素にアクセス
$parent_id = $rows[0]->id;
/* ここまで(1) */
// 例えば%sのところに数値を入れるとエラーになる
// どのようなデータをどのテーブルに登録するか
$sql = 'INSERT INTO sortable(parent_id,ts,text,name,ip) VALUES(%d,%d,%s,%s,%s)';/* (2) */
// セッション変数に登録
$text = $_SESSION['text'];
$name = $_SESSION['name'];
//$title = $_SESSION['title'];
//$stamp = $_SESSION['stamp'];
$result = [];
$result['ts'] = $ts;
// 回答の日時を取得する
$diff= time()-strtotime($ts);
// ipアドレスを取得する
$ip = $_SERVER['REMOTE_ADDR'];
$query = $wpdb->prepare($sql, $parent_id, $ts, $text, $name, $ip);/* (2) */
// プリペアードステートメントを用意してから、下記のようにresultsで値を取得
$query_result = $wpdb->query($query);
// $result = [];
// $result['ts'] = $ts;
print gmdate('h:i:s',$diff);
// 条件式が成り立った場合処理を実行
if (
false === $query_result
) {
$result['error'] = '登録できませんでした' . $wpdb->last_error;
// 条件式が成り立たなければ処理を実行
} else { // どのテーブルの何をどう更新するか
// カラム名 unique_id の質問UUID を一度そのデータを読み込んで取得する
$sql = 'SELECT unique_id FROM sortable WHERE id = %d';
$query = $wpdb->prepare($sql, $wpdb->insert_id);
$rows = $wpdb->get_results($query);
$unique_id = $rows[0]->unique_id;
// アップロードディレクトリ(パス名)を取得する
$upload_dir = wp_upload_dir();
// 『filenames』を記述して配列名を記述し、それに『[]』を代入すればそれは配列として扱われます
$filenames = [];
foreach ($_SESSION['attach']['tmp_name'] as $i => $tmp_name) {
if (empty($tmp_name)) {
$filenames[$i] = '';
} else {
$type = explode('/', $_SESSION['attach']['type'][$i]);
$ext = $type[1];
if (3 == $i) { // 比較した時に3+1以上なら
$n = 'usericon';
} else {
$n = $i + 1;
}
$filenames[$i] = "{$unique_id}_{$n}.{$ext}";
$attach_path = $upload_dir['basedir'] . '/attach/' . $filenames[$i];
// 文字列をファイルに書き込む、文字列データを書き込むファイル名を指定
file_put_contents($attach_path, $_SESSION['attach']['data'][$i]);
}
}
$sql = 'UPDATE sortable SET attach1=%s,attach2=%s,attach3=%s,usericon=%s WHERE id=%d';
$query = $wpdb->prepare($sql, $filenames[0], $filenames[1], $filenames[2], $filenames[3], $wpdb->insert_id);
$wpdb->query($query);
$result['error'] = '';
}
header('Content-type: application/json; charset=UTF-8');
echo json_encode($result);
exit;
}
add_action('wp_ajax_bbs_answer_confirm', 'bbs_answer_confirm');
add_action('wp_ajax_nopriv_bbs_answer_confirm', 'bbs_answer_confirm');
お礼
回答が遅くなり申し訳ありません。 質問画面の確認画面のCSS をチェックしているのですが、確認画面の title-partial-parts にのみ margin-top: 25px; を適応させる方法が分かりません。 質問画面は div id="input_area" 回答画面は div id="confirm_area" を親クラスとして CSS を分けたい場合、どのように書けばよいか分かりますでしょうか? 下記コードで試してみたのですが効かず悩んでおります… div#confirm_area.text-partial-parts { margin - top: 25px; } ※ 質問画面 http://www.irasuto.cfbx.jp/%e8%b3%aa%e5%95%8f%e6%8e%b2%e7%a4%ba%e6%9d%bf/
補足
回答ありがとうございます、textContent で表示して ※ファイルサイズ15MB以内、JPG/GIF/PNG/MP4 は span で別途クラスを作る形になるんですね勉強になりました。 css を作成して画像を並べてみます。 ※ 最新コード https://github.com/i6Grja3R/sample_theme.git