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

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

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

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

PHP

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

Q&A

解決済

2回答

457閲覧

WordPressの記事ページに寄せられたコメントのソートを複数用意したい(記事ページのURLを複数作りたい)

Nerf.this

総合スコア14

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/12/13 03:37

編集2017/12/13 04:47

お忙しい中、私の質問を閲覧いただきありがとうございます。
現在独学でWordPressを学習中なのですが、今回はWordPressの記事ページのコメント一覧の実装に伴い、複雑な問題が発生したため質問させていただきました。
もし解決できそう、または手助けになるアイディアをお持ちの方は、是非ご回答の程よろしくお願いいたします。

###前提・実現したいこと
--- 前提
WordPress 4.7.8
PHP 7.0.18
使用テーマ SKT Design Agency
Comment Rating Field Pluginでコメントに評価を付けられる仕様
functions.phpでコメントにコメントの種類を選択できるプルダウンメニューを追加済み(A, B, Cの3種類)

--- 目的
①WordPressの記事ページにて、コメント一覧をコメントの種類(A,B,C)別に表示したい。
②種類別に表示したコメントを最新順と評価の高い順に画面上で切り替えたい。
③それぞれのページネーションの実装
④同一ページで表示したいのは1種類のみ(他の種類はタブで切り替えたり、別URLを生成したりして切り替えたい)

###試したこと
single.phpでコメント一覧を各種類・ソート別に(3種類×ソート2種=6パターン)取得し、それぞれを表示する。
→実装してみたが、ページネーションのページ数が全件表示した際のページ数になってしまい、種類別に表示するとコメント数の整合性が取れない。
(ページネーションは10ページまで表示されているが、Aのコメントが2ページしか無い場合、3〜10ページが空白になる)

###思いついた実装方法
①記事ページのURLを複数生成する。(Aの最新順、Aの評価順……Cの評価順の6種類)
→同じ記事ページのURLを複数生成できるか分からない。テンプレートもURLを判別して使い分けることができるのか分からない。

②各種類の固定ページ(Aの最新順……Cの評価順の6種類)を用意し、記事ページに記事IDを渡すリンクを作成し、その固定ページへ飛ばす。("ブログURL/固定ページ?post_id=xxx"のような形)
受け渡されたIDをもとに固定ページでコメントを取得し、ページネーションを行う。
→ページネーションのURLが正常に生成されるのか?(パラメータが消えるのではないか?)

###参考サイト様
転職会議(http://jobtalk.jp/)
こちらのサイトの各企業様に寄せられた口コミ一覧が、とてもキレイで見やすかったので、自分でも実装してみたいと思いました。

###追記・修正
functions.phpでコメントにコメントの種類を選択できるプルダウンメニューを追加済み(A, B, Cの3種類)

正しくはラジオボタンでした。
また、こちらの実装方法については以下の通りです。

add_filter( 'comment_form_defaults','change_comment_form'); function change_comment_form($default) { $commenter = wp_get_current_commenter(); //コメントの種類 $default['fields']['email'] .= '<p class="comment-form-author"> <label>コメントの種類</label> <input type="radio" name="contentDetail" value="種類A" id="contentKind01" checked/> <label for="contentKind01">'. __('種類A') . '</label> <input type="radio" name="contentDetail" value="種類B" id="contentKind02" /> <label for="contentKind02">'. __('種類B') . '</label> <input type="radio" name="contentDetail" value="種類C" id="contentKind03" /> <label for="contentKind03">'. __('種類C') . '</label> </p>'; return $default; }

wp_commentmetaテーブルに、meta_key="contentDetail"に紐付いてmeta_valueが入っている状態です。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 04:10

> functions.phpでコメントにコメントの種類を選択できるプルダウンメニューを追加済み これはどういう形でコメントに紐付いているんですか?comment_typeカラムに特定の値が入ってるんですかね?
guest

回答2

0

ベストアンサー

URLパラメータを与えて、ってのは(個人的に)あまり望ましくないですね。
WordPressはindex.phpに一度集めて、全てをパラメータで管理しているわけですから。

予め全てのコメントを記事に読み込んでおき、コメント種類別に分け、jQueryでタブ化させるというのが現実的かなーと思います。
get comments()が記事ごとのコメントを取得でき、同時にmeta_key,meta_valueも指定して取得できるようなので、思ったより冗長にはならなさそうです。

PHP

1$args = array( 2 'post_id' => get_the_ID(), 3 'meta_key' => 'contentDetail', 4 'meta_value' => '種類A' 5); 6$comments = get_comments($args);

※動作テストはしてません

ページングに関しては、同じくget_comments()の引数にnumber(取得数),offsetを通常のページングと同じ要領で渡してやれば出来ない事はなさそうです。

投稿2017/12/13 06:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Nerf.this

2017/12/18 10:19

回答いただきありがとうございます! 反応が遅れてしまい申し訳ありません。 回答の内容は、コメントのページネーションをpaginate_links()を使用せず手動で設定する、ということだとお見受けしました。 確かに手動で設定し、ページネーションのリンクごとタブで切り替えてしまえば今回の実装は可能な気がします!
guest

0

記事ページのURLを複数生成する

個別ページに子ページのURLを作ることはできます、
できますがadd_rewrite_rule();使ったことないとなると道のり長いです

やろうとしてることについて必要になるフックと関数だけ列挙しときます

フック
query_vars
parse_comment_query
(template_include)

関数
add_rewrite_rule();

add_rewrite_rule();で個別ページのURL/コメントの種類/のパーマリンク設定を追加
query_varsでコメントの種類のURLパラメータもクエリ変数に指定できるようにして
parse_comment_queryでそのクエリ変数が指定されていればmeta_queryを追加する
って感じでしょうか

template_includeフィルタはコメントの種類ごとに表示内容が全然違うので
テンプレートファイル自体を切り替えたいとかいう場合に使います


add_rewrite_rule();は正規表現による
URLを書き換え設定を追加します
正規表現を知らないと道のりはさらに長く険しく…

php

1add_rewrite_rule( 2 'mypost_type/([0-9]+)/(\w+)/', 3 'index.php?post_type=mypost_type&p=$matches[1]&page_type=$matches[2]', 4 'top' 5);

これで、例えば
http://example.com/mypost_type/63/hoge/

http://example.com/index.php?post_type=mypost_type&p=63&page_type=hoge
にリダイレクトされるようになります

第3引数のtopは書き換えルールの優先順位を先頭にってことです
wordpressの固定ページとかのリライトルールがほとんどのパターンを引っ掛けてしまうので
ここは割とtop以外の選択肢がないです

add_rewrite_tag()はadd_permastruct()とセットで使うもので
add_rewrite_rule()に渡す引数の生成の設定をする関数です

管理画面のパーマリンク設定でカスタムURLの設定にも使いたいとか
いろんなパーマリンクで同じ書き換えルールのパーツを使うというときに使います

他のカスタム投稿タイプやページタイプでも同様に子ページを作れるようにしときたい
とかいうような場合はadd_rewrite_tag()+add_permastruct()でやっておくのもいいです

特定のカスタム投稿でしか使わないとかなら
add_rewrite_rule()でやっといた方が手間が少ないです

投稿2017/12/13 05:56

編集2017/12/18 11:50
KazuhiroHatano

総合スコア7804

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

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

Nerf.this

2017/12/18 10:39

回答いただきありがとうございます! 反応が遅れてしまい申し訳ありません。 回答の内容は私が実装してみたい内容にマッチしているのですが、挙げていただいた関数, フックについて調べてみたところ、理解に時間がかかりそうな内容でして、いくつものサイトやページを参考に試してみたのですが、上手く実装出来ませんでした… (以下、前提としてパーマリンクをpost titleにしているものとします。) add_rewrite_rule()の認識としては、example.com/postTitle/?my_var1=newpage&my_var2=detail というリクエストを送信すると、example.com/postTitle/newpage/detail というURLにリダイレクトさせることができるものだと思っております。 また、送信するパラメータ(query string?)については、WordPressが認識できるよう自分で設定するもの(add_rewrite_tag?add_filter('query_vars')?)であることもわかりました。 この内容が正しく設定出来ておらず、debug barで調べると、rewrite ruleが自分で設定したもので無いもの(デフォルト設定)が適用されていました。 詰まっている内容の大部分は、恐らく ① add_rewrite_rule()の引数のそれぞれの役割があまり理解出来ていない。 ② ①で使用する正規表現が分からない。 ③ query_varsの設定が正しいのかが分からない の3つでは無いかと考えています。 こちらについて何か詳しい資料か、助言がもしありましたら是非頂戴したいです。 長くなってしまいましたが、よろしくお願いいたします。
Nerf.this

2017/12/19 09:21

回答ありがとうございます。 リライトルールについて様々な方法を頂き、大変助かりました。 しかし、私がまだこの領域に触れたばかりで、完全に納得し実装に漕ぎつけるまでもう少し時間がかかりそうですので、一旦自分で勉強し、分からないことをもう少し細分化し、改めて質問を作成したいと思います! 何度も丁寧に対応していただき本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問