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

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

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

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

PHP

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

受付中

テーマを自作した場合の検索ページの作り方がわからない(Ajex以外の方法が知りたいです)

homepage-site
homepage-site

総合スコア20

WordPress

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

PHP

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

1回答

-1評価

0クリップ

286閲覧

投稿2022/04/18 08:19

編集2022/04/19 21:12

前提

検索欄(front-page.php)と受け取り側(search.php)の2ファイルを用意

実現したいこと

カスタムフィールド名で絞り込み検索を実装したい

発生している問題・エラーメッセージ

検索条件にヒットした募集はありませんでした。と表示されており、検索ページをどのように作成すればいいのかアドバイスをお願いいたします。 front.page.phpに表示しているコンテンツを検索ページにも表示したいです。

該当のソースコード

front-page.php <?php//検索に使用されるページのセクションを識別するために使用,actionはリダイレクトさせたいページ?> <form role="search" method="get" id="searchform" class="searchform" action="http://example.com/"> <div class="hole"> <div class="left"> <label class="screen-reader-text" for="s">キーワード検索</label> </div> <div class="right"> <input type="text" value="" name="s" id="s" placeholder="例)年齢不問"/> <button type="submit" id="searchsubmit"><i class="fa fa-search"></i> 検索</button> </div> </div> </form>
search.php <form method="get" class="single1-search" action="<?php echo esc_url( home_url( '/' ) ); ?>" > <input type="hidden" name="post_type" value="post"> <input type="text" placeholder="<?php if(!is_search()){ echo 'テストから探す';} ?>" value="<?php if(is_search()){ echo get_search_query();} ?>" class="test-searchbody" name="s"> <button type="submit" class="test-searchbutton"></button> </form> <?php $search_query = get_search_query(); ?> <?php global $wpdb; ?> <?php $results = $wpdb->get_results($wpdb->prepare(" FROM $wpdb->postmeta INNER JOIN $wpdb->posts ON post_id = ID WHERE {$wpdb->postmeta}.meta_key IN ('single_rss_feed1') AND meta_value LIKE '{$search_word}' AND post_status = 'publish'", "%$search_query%")); ?> <?php//検索コンテンツを表示させるコード?> <?php//ここから記事表示?> <?php if ($results) : ?> <ul> <?php foreach ($results as $result) : ?> <?php $item = get_post($result->post_id); // ※1 set_other_data($item); // ※2 echo '<ul>'; echo "<li>$item->post_title</li>"; echo "<li><img src=\"{$item->thumbnail}\"></li>"; echo '</ul>'; ?> <?php endforeach; ?> </ul> <?php else : ?> <p><?php echo esc_html('検索条件にヒットした募集はありませんでした。'); ?></p> <?php endif; ?>

search.phpに表示したいコンテンツ

$categories = [];// カテゴリーIDをキーにしたカテゴリー配列を生成 foreach (get_categories() as $category) {//配列の要素のある分だけ繰り返し処理を行う $categories[$category->cat_ID] = $category;// カテゴリーidの取得 } 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); }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2022/04/18 08:25

>(Ajex以外の方法が知りたいです) Ajaxでできそうなのであればそちらで実装してみては? Ajaxであってもそうでなくてもサーバサイドの処理は同じですが。
homepage-site

2022/04/18 08:28

Ajexですと記事とRSSを交互に表示するように作りこんでいるため、自力では実装不可能だと思われます。 デザインが崩れてしまう恐れがあるためphpでの実装を考えています。
m.ts10806

2022/04/18 08:36 編集

AjaxでもリクエストをJavaScriptで構成するだけで、リクエストを受け取って検索処理を行うのはPHPの仕事です。 ※細かいですがA j a xです リクエストを送るフォームと送信を受け取るところは分かりますか? いずれにしてもテーマ自作するとなるとそれなりにきちんとPHPだけでなくWebの仕組みをきちんとおさえる必要があります。
homepage-site

2022/04/18 08:46

送る側がfront-page.phpで受け取る側がsearch.phpですね。一応仕組みは抑えております。wordpressの書き方がわからず困っている状態です。
homepage-site

2022/04/18 08:49

phpで作成できる状態でAjaxまで導入するような必要性がないので、避けたいです。
homepage-site

2022/04/18 08:51

Ajaxでした。指摘ありがとうございます。
m.ts10806

2022/04/19 02:34

質問は編集できますので、本文も直しておいてください。
m.ts10806

2022/04/19 02:35

仕組みがわかっているのでしたらWordpressでもそう変わらないのでは。 リクエスト送って受け取って検索処理して結果を返してHTMLを出力する。 どこまでできて、何ができていませんか?
homepage-site

2022/04/19 06:38

下記の文で出力はできたのですが、データベースから各コンテンツを出力するところで苦戦しています。 <?php $search_query = get_search_query(); ?> <?php global $wpdb; ?> <?php $results = $wpdb->get_results($wpdb->prepare(" SELECT DISTINCT post_id FROM $wpdb->postmeta INNER JOIN $wpdb->posts ON post_id = ID WHERE {$wpdb->postmeta}.meta_key= %s IN ('single_rss_feed1') AND post_status = 'publish'", "%%$search_query%%")); ?> <?php if ($results) : ?> <ul> <?php foreach ($results as $result) : ?> <li> <a href="<?php echo get_permalink($result->post_id); ?>"> <?php echo get_the_title($result->post_id); ?> </li> <?php endforeach; ?> </ul> <?php else : ?> <p><?php echo esc_html('検索条件にヒットした募集はありませんでした。'); ?></p> <?php endif; ?>
homepage-site

2022/04/19 06:40

こちらの文を$wpdbから出力したいのですが、1つずつアドバイスをいただけると助かります。 $categories = [];// カテゴリーIDをキーにしたカテゴリー配列を生成 foreach (get_categories() as $category) {//配列の要素のある分だけ繰り返し処理を行う $categories[$category->cat_ID] = $category;// カテゴリーidの取得 } 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); }
homepage-site

2022/04/19 07:17 編集

カテゴリーを出力する場合は下記のコードで書き方は正しいでしょうか? <?php $categories = [];// カテゴリーIDをキーにしたカテゴリー配列を生成 foreach(get_categories($result->post_id) as $category) { $categories[$category->cat_ID] = $category; } ?>
m.ts10806

2022/04/19 06:59

コード込みでしたら質問本文に追記をお願いします

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

WordPress

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

PHP

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