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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

518閲覧

どうやっても記事が出力されないんですが、SQLにどのように配列を渡せばいいのでしょうか?

homepage-site

総合スコア28

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/07/12 13:42

前提

archive.php(アーカイブページレイアウト)
front-page.php(プルダウン設置)
archive.js(プルダウン機能)

実現したいこと

SQLとPHPをつなぎ、アーカイブページを表示したい

archive.php

<?php $y = get_query_var('year'); $m = get_query_var('monthnum'); ?> <?php $rss_table_name = get_rss_table_name(1); if (ctype_digit($_REQUEST['page'])) { $current_page = (int) $_REQUEST['page']; } else { $current_page = 1; } if ($current_page > $wp_query->max_num_pages) { $current_page = $wp_query->max_num_pages; } if (empty($current_page)) { $current_page = 1; } $block_per_page = 2; //ページブロック件数 $limitSect1 = 5; //タイトルのみ件数 $limitSect2 = 4; //画像と画像の下にタイトル件数 $limitSect3 = 4; //画像と画像の右にタイトル件数 $rss_per_block = $limitSect1 + $limitSect2 + $limitSect3; //ブロックRSS件数 //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; $rss_offset = ($current_page - 1) * $rss_per_page; //テーブル名の変更 $sql = "SELECT * FROM {$rss_table_name} ORDER BY date DESC LIMIT %d,%d"; $query = $wpdb->prepare($sql, $rss_offset, $rss_per_page); //SQL実行と結果取得 $rss_items = $wpdb->get_results($query); $group_per_block = 5; //ブロック投稿グループ件数 $posts_per_group = 1; // 投稿グループ投稿件数 $posts_per_page = $block_per_page * $group_per_block * $posts_per_group; //ページ投稿件数 $posts_offset = ($current_page - 1) * $posts_per_page; $y = get_the_date('Y'); $m = get_the_date('n'); $args = [ 'posts_per_page' => $posts_per_page, 'offset' => $posts_offset, 'meta_key' => 'single_rss_feed1', 'year' => $y, 'monthnum' => $m, ]; $post_items = get_posts($args); /* 検索全件件数取得 */ $mm = str_pad($m, 2, '0', STR_PAD_LEFT); $date_query = "{$y}-{$mm}%"; $sql = " SELECT COUNT(*) AS count FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.ID = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' AND (post.post_date LIKE %s OR post.post_modified LIKE %s ) "; $query = $wpdb->prepare($sql, $date_query, $date_query); $results = $wpdb->get_results($query); $pages = ceil($results[0]->count / $posts_per_page); for ($i = 1; $i <= $pages; ++$i) { if (1 == $i) { $page_text = '<<'; echo "<a href=\"?page={$i}\">{$page_text}</a> "; if ($current_page > 1) { $j = $current_page - 1; } else { $j = 1; } $page_text = '<'; echo "<a href=\"?page={$j}\">{$page_text}</a> "; } if ($i >= $current_page && ++$display_page_count <= $display_pages) { $page_text = $i; echo "<a href=\"?page={$i}\">{$page_text}</a> "; } if ($i == $pages) { if ($current_page < $pages) { $j = $current_page + 1; } else { $j = $pages; } $page_text = '>'; echo "<a href=\"?page={$j}\">{$page_text}</a> "; $page_text = '>>'; echo "<a href=\"?page={$i}\">{$page_text}</a> "; } } ?>

front-page.php

<?php $sql = " SELECT YEAR (post.post_date) AS y, MONTH (post.post_date) AS m, count(*) AS c FROM wp_posts AS post INNER JOIN wp_postmeta AS meta ON post.id = meta.post_id WHERE meta.meta_key = 'single_rss_feed1' AND post.post_type = 'post' AND post.post_status = 'publish' GROUP BY y, m "; $query = $wpdb->prepare($sql); $ym_items = $wpdb->get_results($query); /* 年月別配列を作成 */ $ym_array = []; foreach ($ym_items as $item) { $ym_array[$item->y][$item->m] = $item->c; } $this_year = (string) idate('Y'); // 現在の年を、4桁の文字列で取得 $out = '<ul class="archive-list">'; foreach ($ym_array as $y => $y_items) { if ($y === $this_year) { $out .= '<li class="year acv_open current">'.$y; } else { $out .= '<li class="year">'.$y; } $out .= '<ul class="month-archive-list">'; foreach ($y_items as $m => $c) { $url = home_url("{$y}/{$m}"); $out .= "<li><a href=\"{$url}\">{$y}年{$m}月</a>({$c})</li>"; } $out .= '</ul>'; //閉じる <ul class="month-archive-list"> } $out .= '</li>'; //閉じる <li class="year"> $out .= '</ul>'; //閉じる <ul class="archive-list"> // HTML出力 echo $out; ?> <?php $rss_table_name = get_rss_table_name(1); if (ctype_digit($_REQUEST['page'])) { $current_page = (int) $_REQUEST['page']; } else { $current_page = 1; } if ($current_page > $wp_query->max_num_pages) { $current_page = $wp_query->max_num_pages; } if (empty($current_page)) { $current_page = 1; } $block_per_page = 2; //ページブロック件数 $limitSect1 = 5; //タイトルのみ件数 $limitSect2 = 4; //画像と画像の下にタイトル件数 $limitSect3 = 4; //画像と画像の右にタイトル件数 $rss_per_block = $limitSect1 + $limitSect2 + $limitSect3; //ブロックRSS件数 //RSS読み込み $rss_per_page = $block_per_page * $rss_per_block; $rss_offset = ($current_page - 1) * $rss_per_page; //テーブル名の変更 $sql = "SELECT * FROM {$rss_table_name} ORDER BY date DESC LIMIT %d,%d"; $query = $wpdb->prepare($sql, $rss_offset, $rss_per_page); //SQL実行と結果取得 $rss_items = $wpdb->get_results($query); $group_per_block = 5; //ブロック投稿グループ件数 $posts_per_group = 1; //投稿グループ投稿件数 $posts_per_page = $block_per_page * $group_per_block * $posts_per_group; //ページ投稿件数 $posts_offset = ($current_page - 1) * $posts_per_page; $args = [ 'offset' => $posts_offset, 'posts_per_page' => $posts_per_page, 'meta_key' => 'single_rss_feed1', ]; $post_items = get_posts($args); for ($i = 0; $i < $block_per_page; ++$i) { $contentA = ''; $contentB = ''; $contentC = ''; for ($j = 0; $j < $rss_per_block; ++$j) { $item_index = $i * $rss_per_block + $j; if ($item_index >= count($rss_items)) { break; } $item = $rss_items[$item_index]; $title = "<strong><a href=\"{$item->link}\">{$item->title}</a></strong>"; if (empty($item->img)) { $img = ''; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; $subject = '<a href="' . $item->link . '">' . mb_substr($item->subject, 0, 10) . '</a>'; if ($j < $limitSect1) { $contentA .= "<li class=\"sitelink\">{$title}</li>"; //タイトルのみ } elseif ($j < $limitSect1 + $limitSect2) { $contentB .= "<li class=\"sitelink2\"><figure class=\"snip\"><figcaption>{$image}<br>{$title}<p class=\"btn\">{$subject}</p></figcaption></figure></li>"; //画像と画像の下にタイトル } else { $contentC .= "<li class=\"sitelink3\">{$image}{$title}</li>"; //画像と画像の右にタイトル } } echo '<div class="rssBlock">'; echo "<ul class=\"wiget-rss\">{$contentA}</ul>"; echo "<ul class=\"wiget-rss\">{$contentB}</ul>"; echo "<ul class=\"wiget-rss\">{$contentC}</ul>"; echo '</div>'; echo '<div id="entry-content">'; for ($k = 0; $k < $group_per_block; ++$k) { //画像とタイトルの処理 for ($j = 0; $j < $posts_per_group; ++$j) { $item_index = $i * $group_per_block * $posts_per_group + $k * $posts_per_group + $j; if ($item_index >= count($post_items)) { break; } $item = $post_items[$item_index]; set_other_data($item); echo '<div class="entry-post">'; //記事1つ1つ echo "<figure class=\"entry-thumnail\"><a href=\"{$item->guid}\"><img src=\"{$item->thumbnail}\"></a></figure>"; //サムネイル画像 echo '<header class="entry-header">'; echo "<h2 class=\"entry-title\"><a href=\"{$item->guid}\">{$item->post_title}</a></h2>"; //タイトル echo '<p class="post-meta">'; //日付け、カテゴリー、コメント数 echo '<span class="fa-clock"></span>'; echo "<span class=\"published\">{$item->post_date}</span>"; //日付け echo '<span class="fa-folder"></span>'; echo '<span class="category-link">'; if ($item->categories) { foreach ($item->categories as $cat_ID) { $category = $categories[$cat_ID]; echo "<a href=\"{$category->category_link}\">{$category->cat_name}</a>"; } } echo '</span>'; //カテゴリー echo '<span class="fa-comment"></span>'; echo "<span class=\"comment-count\"><a href=\"{$item->guid}\">{$item->comments}</a></span>"; //コメント数 echo '</p>'; echo '</header>'; echo "<p class=\"entry-snippet\">{$item->post_excerpt}</p>"; //抜粋 echo '</div>';//記事1つ1つ } } echo '</div>';//記事全体のid } //ページ $display_pages = 5; //番号を表示 $display_page_count = 0; $pages = ceil($wp_query->found_posts / $posts_per_page); for ($i = 1; $i <= $pages; ++$i) { if (1 == $i) { $page_text = '<<'; echo "<a href=\"?page={$i}\">{$page_text}</a> "; if ($current_page > 1) { $j = $current_page - 1; } else { $j = 1; } $page_text = '<'; echo "<a href=\"?page={$j}\">{$page_text}</a> "; } if ($i >= $current_page && ++$display_page_count <= $display_pages) { $page_text = $i; echo "<a href=\"?page={$i}\">{$page_text}</a> "; } if ($i == $pages) { if ($current_page < $pages) { $j = $current_page + 1; } else { $j = $pages; } $page_text = '>'; echo "<a href=\"?page={$j}\">{$page_text}</a> "; $page_text = '>>'; echo "<a href=\"?page={$i}\">{$page_text}</a> "; } } ?>

試したこと

consoleでJavascriptの読み込み確認
SQLに直接配列が渡るようにコード修正
AND (post.post_date LIKE %s OR post.post_modified LIKE %s )

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

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

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

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

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

homepage-site

2022/07/12 13:46

### archive.js ``` jQuery( document ).ready( function( $ ) { // @link: //年月別アーカイブ表示用 $(".archive-list &gt; li").click(function() { //@link: if($(this).next(".month-archive-list").is(":visible") || $(this).hasClass("acv_open")){ //既に開いている場所なら $(".month-archive-list", this).slideUp("fast"); //閉じる $(this).removeClass("acv_open"); //.acv_open削除 } else { //閉じている場所なら $(this).siblings().children(".month-archive-list").slideUp("fast"); //その他のリストを閉じる $(".month-archive-list", this).slideDown("fast"); //開く $(".year").removeClass("acv_open"); //.acv_open削除 $(this).addClass("acv_open"); //.acv_open付加 } }); }); ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問