functionsでどこまで括るのが正解なのか
RSSを取得→格納→表示→定期的にキャッシュをphpで行っております。
index.phpにすべて記載したところfunctions.phpを利用したほうが良い、require_onceでpage.phpなどからindex.phpに読み込むようご指摘をいただいたので、コードを考えてみたのですがどの範囲までfunctionで括るのが正解なのかわかりません。
意見がわかれておりまして、役割によって分けるべきという方と、page.phpのみfunctions.phpを使いそのほかはrequire_onceで読み込めばいいという方と、すべてrequire_onceで読み込めばいいという方の3パターンありました。
どの方法が1番適切でしょうか?コードは以下になります。
<?php
//別ファイルにして読み込む場合
function db($hlxclitx_wp1){//DB名を引数として受け取る $dbname
//DB接続
try {
$pdo = new PDO(“mysql:dbname=”$hlxclitx_wp1”_name;host=”localhost”;charset=utf8″,”hlxclitx_wp1”,”E.HrypHWxNmltXgC5eS26”));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
}catch (PDOException $e) {
echo $e->getMessage();
return $db = null;
}
}
// カテゴリーIDをキーにしたカテゴリー配列を生成
function get_category_name_by_id($categories) {
foreach (get_categories() as $category) {
$categories[$category->cat_ID] = $category;
}
// 投稿の情報を追加
function set_other_data($post)
{
// アイキャッチIDを取得
$post_thumbnail_id = get_post_thumbnail_id($post);
// アイキャッチ画像の確認
if ($post_thumbnail_id) {
// 存在する
$image_src = wp_get_attachment_image_src($post_thumbnail_id);
// サムネイルの画像URLを設定
$post->thumbnail = $image_src[0];
} else {
// 存在しない
$post->thumbnail = 'noimage.jpg';
}
// カテゴリーIDを取得
$post->categories = wp_get_post_categories($post->ID);
// コメントテキスト
if (0 == $post->comment_count) {
// コメントなし
$post->comments = __('No Comments');
} else {
// コメントあり
$post->comments = $post->comment_count.'件のコメント';
}
// コメントリンク
$post->comments_link = get_comments_link($post->ID);
}
//古いデータを削除
//※先に実行する
//ものがないものはfunctons.phpに書いても使えないので、require_onceでまとめて読み込む認識
function delete_date_pdo($delete_date)
{
$sql = 'DELETE FROM rss_feed WHERE date < ?';
$stmt = $dbh->prepare($sql);
$delete_date = date('Y-m-d H:i:s', strtotime('-1 week')); //※削除対象日付
$stmt->execute([$delete_date]);
}
//RSS保存
function save_url_rss($stmt){//本来は値がほしいところでfunction{}するのだろう長さの加減がわからず
$url1 = [
'http://nns2ch.net/index.rdf',
'http://aqua2ch.net/index.rdf',
'https://worldfn.net/index.rdf',
];
$stmt = $dbh->prepare('insert into rss_feed (title, link, date, img) values (?, ?, ?, ?) on duplicate key update title=?, link=?, date=?, img=?');
foreach ($url1 as $url) {
if (($rss = @simplexml_load_file($url)) === false) {
continue;
}
foreach ($rss->item as $item) {
$dc = $item->children('dc', true);
$date = date('Y-m-d H:i:s', strtotime($dc->date));
//※削除対象日付より古いRSSは保存しない
if ($date < $delete_date) {
continue;
}
$title = $item->title;
$link = $item->link;
$content = $item->children('content', true);
$result = preg_match('/<img[^>]*src=\"([^"]+)\"[^>]*>/i', $content->encoded, $matches);
if (1 == $result) {
$img = $matches[1];
} else {
$img = '';
}
$stmt->execute([$title, $link, $date, $img, $title, $link, $date, $img]);
}
}
}
function one_page_count($post_items){
//表示設定
$current_page = $_REQUEST['page'] ?? 1; //現在ページ
$block_per_page = 2; //ページあたりブロック件数
$rss_per_block = 18; //ブロックあたりRSS件数
$posts_per_block = 5; //ブロックあたり投稿件数
//RSS読み込み
$rss_per_page = $block_per_page * $rss_per_block; //ページあたりRSS件数
$rss_offset = ($current_page - 1) * $rss_per_page; //RSSオフセット
$sql = 'SELECT * FROM rss_feed ORDER BY date DESC LIMIT ?,?';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $rss_offset, PDO::PARAM_INT);
$stmt->bindParam(2, $rss_per_page, PDO::PARAM_INT);
$stmt->execute();
$rss_items = $stmt->fetchAll(PDO::FETCH_OBJ);
//投稿読み込み
$posts_per_page = $block_per_page * $posts_per_block; //ページあたり投稿件数
$posts_offset = ($current_page - 1) * $posts_per_page; //投稿オフセット
$args = [
'posts_per_page' => $posts_per_page,
'offset' => $posts_offset,
];
$post_items = get_posts($args);
}
?>
お礼
回答ありがとうございました。 シングルクォーテーションで囲んだら直りました。