• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コメント欄を出力した後に返信機能を追加したい)

コメント欄への返信機能の追加方法とは?

このQ&Aのポイント
  • コメント欄に追加するためには、カスタムフィールド名を使用することができます。
  • 追加したい記事を振り分けるために、$post_idsという変数を使用します。
  • コメントの取得にはget_comments関数を使用し、コメントがない場合には'コメントなし'と表示します。

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.29

訂正 誤 LIKE 'あ' 正 LIKE '%あ%'

php_learn
質問者

お礼

すみません、コメントが締め切られてしまったので下記のURLに回答よろしくお願い致します。 https://okwave.jp/qa/q9996599.html

その他の回答 (28)

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.8

・現在タイトルのみ5件表示しているのですが、それぞれにul classがついている状態です。タイトルのみ1つだけul classを付けたい場合どうすればよいでしょうか? それぞれにul classはついていないと思います。 こんな感じにされたいのでしょうか。 タイトルのみ <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul> 画像と画像の下にタイトル <ul> <li>~</li> <li>~</li> <li>~</li> <li>~</li> </ul> 画像と画像の右にタイトル <ul> <li>~</li> <li>~</li> <li>~</li> <li>~</li> </ul>

php_learn
質問者

お礼

回答の内容が間違っておりました。すみません。 タイトルのみの場合ul classが5つ付与されているのですが、これを全体で1つにすることは可能でしょうか? タイトルのみ <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul> <ul><li>~</li></ul>

php_learn
質問者

補足

画像と画像の下にタイトル <ul> <li>~</li> <li>~</li> <li>~</li> <li>~</li> </ul> 画像と画像の右にタイトル <ul> <li>~</li> <li>~</li> <li>~</li> <li>~</li> </ul> ご回答ありがとうございます 上記のようにしたいのですが、それぞれにul classがついていて困っています…

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.7

・ワードをクリックした後に表示されるものと、検索欄を使って表示されるものが同じsearch.phpでも機能するのでしょうか? 先ほどのコードで機能はしているような気がします。 検索欄を使うとURLに ?s=検索文字 が付加されています。 おそらくですが、s=があるとsearch.phpが呼ばれているのではないかと思います。 なので、クリックするワードのリンクを「href=\"?s={$row[2]}\"」としています。 文字列によってはエスケープした方がいいのかもしれませんので、いろいろな文字で検索を試してみて、問題があればエスケープしてください。

php_learn
質問者

お礼

あれから作り直してみたのですが、ul classを1つずつ出力することができませんでした。 for ($j=0; $j<$sect1Limit; $j++) {  でエラーが出てしまいます。 unexpected ';', expecting ')' $limitSect1 = 5; でタイトルだけの構文をまとめて、 $limitSect2 = 4; でタイトル下に画像をまとめて、 $limitSect3 = 4; でタイトル横に画像をまとめる (略) echo '<ul>', PHP_EOL;     for ($j=0; $j<$sect1Limit; $j++) { if ($j >= 0 && $j <= 4) { echo "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } } echo '</ul>', PHP_EOL; echo '<ul>', PHP_EOL; for ($j=0; $j<$sect2Limit; $j++) { elseif ($j >= 5 && $j <= 8) { echo "<li class=\"sitelink2\">{$image}<br>{$title}</li>"; // } } echo '</ul>', PHP_EOL; echo '<ul>', PHP_EOL; for ($j=0; $j<$sect3Limit; $j++) { elseif ($j >= 9 && $j <= 12) { echo "<li class=\"sitelink3\">{$image}{$title}</li>"; // } } echo '</ul>', PHP_EOL; } }

php_learn
質問者

補足

ありがとうございます。 もう1点だけお聞きしたいのですが、前日上げたul classを付ける場合 ifにhtml classを付けることができないのですが、どのようにclassを付与すればよいでしょうか? ____________________________________________________________ 前回の質問で全体にclassを付けることができました。ありがとうございます。 現在タイトルのみ5件表示しているのですが、それぞれにul classがついている状態です。タイトルのみ1つだけul classを付けたい場合どうすればよいでしょうか? //読み込み $block_per_page = 2; //ページあたりブロック件数 $rss_per_block = 18; //ブロックあたりRSS件数 //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); //RSS表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; echo '<div class="rssBlock">'; echo '<ul class="wiget-rss">'; 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 = "<a href=\"{$item->link}\">{$item->title}</a>"; if (empty($item->img)) { $img = 'wp-content/uploads/2021/12/EXt1cESWAAAwdOY.jpg'; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; if ($j >= 0 && $j <= 4) { echo "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j >= 5 && $j <= 8) { echo "<li class=\"sitelink2\">{$image}<br>{$title}</li>"; // 画像と画像の下にタイトル } elseif ($j >= 9 && $j <= 12) { echo "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } } echo '</ul>'; echo '</div>';

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.6

・検索欄の下におすすめワードなどで掲載したいのですが、それは難しいでしょうか? これであっているかどうかわかりませんが、 index.phpのここを、 ---- foreach (array_slice($rows, -10) as $row) vprintf("%s %s\n", array($row[0], $row[2])); ---- 以下のようにしてみてください。 ---- echo '<ul>'; foreach (array_slice($rows, -10) as $row) { echo "<li><a href=\"?s={$row[2]}\">{$row[0]} {$row[2]}</a></li>"; } echo '</ul>'; ----

php_learn
質問者

お礼

今の自分が考えられる限界でした。間違っているかもしれませんが、よろしくお願いします。 $rss_per_block = $contentA + $contentB + $contentC ; //ブロックあたりRSS件数 (略) for ($i = 0; $i <= 5; $i++) { $contentA .= '<li class=\"sitelink\">' .$title</li>"; // タイトルのみ } for ($j = 0; $i <= 4; $i++) { $contentB .= '<li class=\"sitelink2\">'.$image<br>$title</li>"; // 画像と画像の下にタイトル } for ($i = 0; $i <= 4; $i++) { $contentC .= '<li class=\"sitelink3\">'.$image,$title</li>"; // 画像と画像の右にタイトル } } echo <<<HTML <ul class="sitelink">$contentA</ul> <ul class="sitelink2">$contentB</ul> <ul class="sitelink3">$contentC</ul> HTML; echo '</div>';

php_learn
質問者

補足

下のほうまで使ってしまい申し訳ないです。 今回だけにします。 ul classを項目ごとに計3つ付ける場合、 forを使い0~1の場合にecho '<ul></ul>', 6~7の場合にecho '<ul></ul>',10~11の場合にecho '<ul></ul>',というのは可能でしょうか?

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.5

・検索されたワードを保存して表示してそこから類似の記事を出力する方法を考えています。 ワードを表示して類似の記事を検索して表示するタグと似たような機能を自作しているのですが、記事に結び付ける考え方がわかりません。アドバイスいただけると助かります。 記事に結び付ける、とはどのようなことでしょうか。 いただいたコードではうまく動作しなかったため、私は以下のように変更して確認してみました。 コードがしようとしている動作にはなったと思うので、質問者さまの環境でうまく動作していなけば調整してみてください。 保存するファイルについてですが、ファイル名だけでアクセスするとファイルの場所がわからないのでよくありません。 また、ファイル名やファイルの場所は変更することがあるかも知れないので、どこか一か所で定義した方がいいと思います。 どこにするかですが、functions.php以外にふさわしいところはないと思います。 ファイル名を取得する関数を作ってもよかったのですが、定義するだけなので定数にしてみました。 質問者さまがファイルをどこに作成されたかったかわからなかったので、私はテーマディレクトリと同じにしています。 厳密にはfunctions.phpと同じディレクトリのことで、__DIR__が現在実行中のファイルのディレクトリと言う意味です。 functions.php ---- // 検索ワードファイルパス define('SEARCH_WORDS_FILE_PATH', __DIR__.'/test.csv'); ---- search.phpはほぼそのままです。 ファイルパスは上記のものを使うようにしました。 保存したCSVファイルに余計な改行が入っていたのでPHP_EOLをなくしました。 search.php ---- // chmodで書き込み権限を付与 $filename = chmod(SEARCH_WORDS_FILE_PATH, 0775); // PHPでcsvファイルを読み込みする var_dump(SEARCH_WORDS_FILE_PATH); // 送信内容をShift_JISに変更 mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); // 書き方はおそらくあってる $keyword_data = array(date('Y-m-d-G-i-s'), $_SERVER["REMOTE_ADDR"], $_GET['s']); // ファイルを開くか、新しいテキストファイルを作って最後に追加書き込み $fp = fopen(SEARCH_WORDS_FILE_PATH, 'a'); ---- index.phpもほぼそのままで、ファイルパスのところだけです。 ファイルが存在していないとエラーになるのであらかじめ空のファイルを作っておいてください。 index.php ---- $fp = fopen(SEARCH_WORDS_FILE_PATH, 'r'); ---- それと、検索ワード入力欄をどのように表示されているかわからなかったので、私はindex.phpで以下のようにしています。 ---- <?php get_search_form(); ?> <!--最近検索されたワード--> ----

php_learn
質問者

お礼

前回の質問で全体にclassを付けることができました。ありがとうございます。 現在タイトルのみ5件表示しているのですが、それぞれにul classがついている状態です。タイトルのみ1つだけul classを付けたい場合どうすればよいでしょうか? //読み込み $block_per_page = 2; //ページあたりブロック件数 $rss_per_block = 18; //ブロックあたりRSS件数 //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); //RSS表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; echo '<div class="rssBlock">'; echo '<ul class="wiget-rss">'; 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 = "<a href=\"{$item->link}\">{$item->title}</a>"; if (empty($item->img)) { $img = 'wp-content/uploads/2021/12/EXt1cESWAAAwdOY.jpg'; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; if ($j >= 0 && $j <= 4) { echo "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j >= 5 && $j <= 8) { echo "<li class=\"sitelink2\">{$image}<br>{$title}</li>"; // 画像と画像の下にタイトル } elseif ($j >= 9 && $j <= 12) { echo "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } } echo '</ul>'; echo '</div>';

php_learn
質問者

補足

記事に結び付ける、とはどのようなことでしょうか。 A.説明不足で申し訳ありません。検索結果表示にsearch.phpを使用するものだと考えていたのですが… 今回の検索されたワードから表示するものは通常の検索欄と違い別途用意して、タグ(よく検索されるワード)の代わりとしてcsvから最近検索されたワード表示→クリック後にそこから連想されるような記事を表示する仕組みを作る予定でした。 検索欄の下におすすめワードなどで掲載したいのですが、それは難しいでしょうか? いただいたコードではうまく動作しなかったため、私は以下のように変更して確認してみました。 コードがしようとしている動作にはなったと思うので、質問者さまの環境でうまく動作していなけば調整してみてください。 A.ありがとうございます。 index.phpに検索欄を配置する test.csvを配置する search.phpに検索結果を配置する ここまでは良いのですが、ワードをクリックした後に表示されるものと、検索欄を使って表示されるものが同じsearch.phpでも機能するのでしょうか?

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.4

RSSについて。 forの前後で出力してみてください。 ---- echo '<h3>RSS</h3>'; echo '<div class="rssBlock">'; echo '<ul class="wiget-rss">'; 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 = "<a href=\"{$item->link}\">{$item->title}</a>"; if (empty($item->img)) { $img = 'wp-content/uploads/2021/12/EXt1cESWAAAwdOY.jpg'; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; if ($j >= 0 && $j <= 4) { echo "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j >= 5 && $j <= 8) { echo "<li class=\"sitelink2\">{$image}<br>{$title}</li>"; // 画像と画像の下にタイトル } elseif ($j >= 9 && $j <= 12) { echo "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } } echo '</ul>'; echo '</div>'; echo '<h3>投稿</h3>'; ----

php_learn
質問者

補足

出力することができました。ありがとうございます。 もう1点だけお聞きしたいのですが、検索されたワードを保存して表示してそこから類似の記事を出力する方法を考えています。 ワードを表示して類似の記事を検索して表示するタグと似たような機能を自作しているのですが、記事に結び付ける考え方がわかりません。アドバイスいただけると助かります。 //search.php <?php if (have_posts()) : ?> <?php if (!isset($_GET['s']) || empty($_GET['s'])) { echo '検索キーワード未入力'; } else { echo '“' . $_GET['s'] . '”の検索結果:' . $wp_query->found_posts . '件'; // 検索キーワードと該当件数を表示 // chmodで書き込み権限を付与 $filename = chmod("test.csv", 0775); // PHPでcsvファイルを読み込みする $f_path = "test.csv"; var_dump($f_path); // 送信内容をShift_JISに変更 mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); // 書き方はおそらくあってる $keyword_data = array(date('Y-m-d-G-i-s'), $_SERVER["REMOTE_ADDR"], $_GET['s'] . PHP_EOL); // ファイルを開くか、新しいテキストファイルを作って最後に追加書き込み $fp = fopen('test.csv', 'a'); // ファイルに対する処理を行う前にファイルをロックして、作業中は他の人がそのファイルに作業を行えないようにする、排他的ロック flock($fp, LOCK_EX); // CSVファイルにフォームの送信内容を記入しています fputcsv($fp, $keyword_data); // ロック解除 flock($fp, LOCK_UN); // CSVファイルをクローズして終わり fclose($fp); } ?> <ul> <?php while (have_posts()) : the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a> </li> <?php endwhile; ?> </ul> <?php else : ?> 検索されたキーワードにマッチする記事はありませんでした <?php endif; ?> //index.php <?php setlocale(LC_ALL, 'ja_JP.UTF-8'); $fp = fopen('test.csv', 'r'); flock($fp, LOCK_SH); $rows = array(); while ($row = fgetcsv($fp)) array_push($rows, $row); flock($fp, LOCK_UN); fclose($fp); foreach (array_slice($rows, -10) as $row) vprintf("%s %s\n", array($row[0], $row[2])); ?> <!--最近検索されたワード--> <?php setlocale(LC_ALL, 'ja_JP.UTF-8'); $fp = fopen('test.csv', 'r'); flock($fp, LOCK_SH); $rows = array(); while ($row = fgetcsv($fp)) array_push($rows, $row); flock($fp, LOCK_UN); fclose($fp); foreach (array_slice($rows, -10) as $row) vprintf("%s %s\n", array($row[0], $row[2])); ?>

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.3

functions.phpのコメント欄の設定コードが冗長的でしたので、まとめてみました。 「コメント」のlabelを簡単に削除する方法はなさそうでしたので、入力欄のHTMLで調整しています。 ---- // カスタマイズコメントフォーム if (!function_exists('custom_comment_form')) { function custom_comment_form($args) { // 「コメントを残す」を削除 $args['title_reply'] = ''; //コメント欄の前に表示する文字列の削除 ※デフォルトではコメント $args['comment_field'] = '<p class="comment-form-comment"><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>'; //「admin としてログイン中。ログアウトしますか ? * が付いている欄は必須項目です」を削除 $args['logged_in_as'] = ''; // 「メールアドレスが公開されることはありません」を削除 $args['comment_notes_before'] = ''; return $args; } } add_filter('comment_form_defaults', 'custom_comment_form'); // カスタマイズコメントフォームフィールド if (!function_exists('custom_comment_form_fields')) { function custom_comment_form_fields($arg) { // コメントからウェブサイトとEmailを削除 $arg['url'] = ''; $arg['email'] = ''; return $arg; } } add_filter('comment_form_default_fields', 'custom_comment_form_fields'); ---- コメントの処理は本来のcomments.phpで処理した方がいいと思いますので、single.phpでは以下の1行でコメント処理を呼ぶようにしてみてください。 ---- comments_template(); ---- comments.phpはこちら。 ---- <div id="comments" class="comments"> <h3 id="resp"><?php the_title(); ?>へのコメント</h3> <?php if (have_comments()) { //コメントがあったらコメントリストを表示する?> <ol class="commets-list"> <?php wp_list_comments(); //コメント出力?> </ol> <?php } comment_form(); ?> </div> ----

php_learn
質問者

お礼

http://magure-hits.net/?p=71 返信機能を無効にして作る場合、こちらのサイトを参考にして作らせていただく予定です。

php_learn
質問者

補足

functions.phpのコメント欄の設定コードが冗長的でしたので、まとめてみました。 「コメント」のlabelを簡単に削除する方法はなさそうでしたので、入力欄のHTMLで調整しています。 A.ありがとうございます。削除することができました。 functions.phpで1つにまとめる方法もあるんですね勉強になります。 コメントの処理は本来のcomments.phpで処理した方がいいと思いますので、single.phpでは以下の1行でコメント処理を呼ぶようにしてみてください。 A.回答ありがとうございます。 どうやらデフォルトでcomment-reply.min.jsが読み込まれており、wordpressのテンプレートを使った場合自動でスクロールが読み込まれるようです。 返信機能を外す場合は、 ダッシュボード→設定→ディスカッション→ コメントを 〇 階層までのスレッド (入れ子) 形式にするのチェックを外す必要があります。 ライブドアのように返信機能をその場でつける場合、 1.自作する 2.jsを導入する 3.データベースを使う3択しかないようです。 jsで似たような機能を探しましたが該当するものはありませんでした。 自作するほうが簡単だと思われますが、クラッカーの攻撃に合う危険があると過去の質問にありました。 データベースを使いコメントを表示するべきでしょうか? 返信をその場で実装することが目的ですがどこまでデータベースを使用するべきか困っております。 アドバイスよろしくお願いいたします。 もう一つ質問があるのですがRSSのhtmlクラスつけでdivとulが1つずつにそれぞれに出力されていて、全体に1つだけに変更したいです。 ※全体に1つだけつけたいもの echo '<div class="rssBlock">'; echo '<ul class="wiget-rss">'; //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); //投稿読み込み $group_per_block = 5; //ブロックあたり投稿グループ件数 $posts_per_group = 3; //投稿グループあたり投稿件数 $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, ]; $post_items = get_posts($args); //表示 for ($i = 0; $i < $block_per_page; ++$i) { echo '<h2>ブロック</h2>'; echo '<h3>RSS</h3>'; 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 = "<a href=\"{$item->link}\">{$item->title}</a>"; if (empty($item->img)) { $img = 'wp-content/uploads/2021/12/EXt1cESWAAAwdOY.jpg'; } else { $img = $item->img; } $image = "<a href=\"{$item->link}\"><img src=\"{$img}\" width=\"100\"></a>"; echo '<div class="rssBlock">'; echo '<ul class="wiget-rss">'; if ($j >= 0 && $j <= 4) { echo "<li class=\"sitelink\">{$title}</li>"; // タイトルのみ } elseif ($j >= 5 && $j <= 8) { echo "<li class=\"sitelink2\">{$image}<br>{$title}</li>"; // 画像と画像の下にタイトル } elseif ($j >= 9 && $j <= 12) { echo "<li class=\"sitelink3\">{$image}{$title}</li>"; // 画像と画像の右にタイトル } echo '</ul>'; echo '</div>'; }

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.2

ウィジェットの情報、ありがとうございます。 画像と似たダッシュボードになりました。 最近のコメントについて。 いただいたコードを実行してみましたが、同じものは表示されませんでした。 コードを見る限り、同じものが出そうにもありません。 「最近のコメント(comments)」は1回でもいいような気がします。 それを直すとしたら、こんなコードになります。 <dl>タグの使い方に誤りがありそうなので、<div>タグと入れ替えています。 ---- <!--最近のコメント--> <?php $args = array( 'author__not_in' => '1', 'number' => '4', 'status' => 'approve', 'type' => 'comment' ); $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); // Comment Loop if ( $comments ) { ?> <!-- 表示部分 --> <div class="side-title">最近のコメント(comments)</div> <div class="commentlist"> <?php foreach ( $comments as $comment ) { // 記述が長いので $pid に入れておく $pid = $comment->comment_post_ID; // 必要な文字列データの取得 $url = get_permalink($pid); $img = get_the_post_thumbnail($pid , array('class' => 'myClass')); $date = get_comment_date('(Y/n/d)', $comment->comment_ID); $title = get_the_title($pid); $text = get_comment_text($comment->comment_ID); $user_id = $comment->comment_author; // デフォルト値で初期化して $user_id = '名無しさん(anonymous)'; if (!empty($comment->comment_author)) { $user_id = $comment->comment_author; } elseif (!empty($comment->user_id)) { $user_id = $comment->user_id; } ?> <dl class="mycomment"> <dt class="imgcomment"><a class="commentheight" href="<?= $url ?>"><?= $img?></a></dt> <dd class="commentnumber"> <a href="<?= $url ?>"><?= $title ?></a> <span class="comment"><?= $text ?></span> <span class="comment_id"><?= $user_id ?></span> <span class="my_author"><?= $date ?></span><br> </dd> </dl> <?php } ?> </div> <?php } else { echo 'コメントなし'; } ?> ---- この下にあった、 </dl> </div> は削除しています。 私の表示結果を添付します。

php_learn
質問者

お礼

送信と返信のテンプレートパラメーターが違うため同arry()で括ることができないため、分けて考えることにしました。 title_reply_to//コメントに対する返信(TwentyElevenでいうところの「返信↓」)の表示方法 上記のパラメーターでも返信について変更できるかもしれませんがよくわかりません。 comment-form-comment label comment-form-commentの下のlabelタグ(文言)を削除したいのですができませんでした。 削除は難しそうだったのでそのまま表示する予定です。 様々なコードを取り付けながら自作したので、アバター画像を非表示にする方法がわかりませんでした。 返信機能はデフォルトでついていますが理想とするものではないので非表示にしてfunctionsで自作するべきかもしれません。 セキュリティに関してはcomments_open()を使っていないのと文字以外のものを入れた際に弾くようにしたいのですが難しく設定できませんでした。 以前公開されているテーマのコメント欄をカスタマイズしたので、作成済みと勘違いしておりました。すみません。 htmlで作る方法や自作する方法もありましたがバージョンアップでエラーが起きると書いてあったため断念しております。 質問が多くなりすみません。 ※デフォルトの自作コメント欄の作り方 https://blog.dododori.com/create/program/wordpress-comment/ ※htmlとphpで作る方法 https://labelog.net/post/536 ※コメント欄の画像と目標の画像 https://imgur.com/20eEfQF.jpg//コメント欄の画像 https://imgur.com/oz1rVW7.jpg//コメント欄の画像 https://imgur.com/x7kbpHm.jpg//目標の画像 ※コメント欄についてのコード(single.php) <div id="comments" class="comments"> <h3 id="resp"><?php the_title(); ?>へのコメント</h3> <?php if( have_comments() ): //コメントがあったらコメントリストを表示する ?> <ol class="commets-list"> <?php wp_list_comments(); //コメント出力?> </ol> <?php endif; $comments_args = array(//このタグはテンプレート内で完全なコメントフォームを出力します。 'lavel_submit' => ('コメントを送信'),// 送信ボタンのタイトルを変更 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8" aria-required="true">' . '</textarea></p>',//コメント入力フォームの表示方法 $comments_arg=array(//wp_list_commentsは、コメント一覧を表示する関数であって、コメントを呼び出す作業が別に必要ということです。 'post_id'=>$post->ID ), wp_list_comments(array(),get_comments($comments_arg)), comment_form($comments_args),//$argsを設定し、comment_form($args)と呼び出せば変更することができるはずです。 ); ?> </div> ※functions.php(コメント欄で非表示にしたいものを記述) // 「コメントを残す」を削除 add_filter( 'comment_form_defaults', 'my_title_reply');//ブラウザ画面へ送信する前に、それを変更できます function my_title_reply( $defaults){ $defaults['title_reply'] = ''; return $defaults; } //admin としてログイン中。ログアウトしますか ? * が付いている欄は必須項目ですを削除 add_filter('comment_form_defaults', 'custom_comment_form');//ブラウザ画面へ送信する前に、それを変更できます function custom_comment_form( $args){ $args['logged_in_as'] = ''; return $args; } //コメント欄の前に表示する文字列の削除 ※デフォルトではコメント add_filter('comment_form_defaults', 'my_title_reply');//ブラウザ画面へ送信する前に、それを変更できます if (!function_exists( 'my_title_reply' ) ) {//同じ関数が存在しない場合のみ関数を定義 function my_title_reply( $args){ $args['comment-form-comment'] = ''; return $args; } } // 「メールアドレスが公開されることはありません」を削除 if (!function_exists( 'my_comment_form_before' ) ) {//同じ関数が存在しない場合のみ関数を定義 function my_comment_form_before( $defaults){ $defaults['comment_notes_before'] = ''; return $defaults; } add_filter( "comment_form_defaults", "my_comment_form_before"); } // コメントからウェブサイトとEmailを削除 if (!function_exists( 'my_comment_form_remove' ) ) {//同じ関数が存在しない場合のみ関数を定義 function my_comment_form_remove($arg) { $arg['url'] = ''; $arg['email'] = ''; return $arg; } add_filter('comment_form_default_fields', 'my_comment_form_remove'); } // ---------------------------------------------------------------------------- // コメント欄の名前が未入力の場合の投稿者名 // ---------------------------------------------------------------------------- function default_author_name($author, $comment_ID, $comment) { if ($author == __('Anonymous')) { $author = '名無しさん'; } return $author; } add_filter('get_comment_author', 'default_author_name', 10, 3); 前回の質問でも同様のものをコメントしたのですが場所が場所なのでもう一度コメントいておきます。 comment_reply_link()やwp_list_comments();を使い、何とか返信機能を下に移動するものからその場で矢印を開いて名前と返信機能を起動するように作っているのですがなかなかうまくいきません。 別ページに飛ぶものから下に移動させるようにできるように組み替えることもできるようなので、 <?php wp_list_comments(); //コメント出力?> //返信機能 ()の中に下に移動させるのではなく名前、返信ボタン、返信欄を表示させたいのですが、可能でしょうか? http://www.cattlemute.com/2018/03/25/766/ 参考サイト

php_learn
質問者

補足

よく確認したところ同じ記事でコメントが複数書かれているだけでした。 「最近のコメント(comments)」は1回でもいいような気がします。 それを直すとしたら、こんなコードになります。 <dl>タグの使い方に誤りがありそうなので、<div>タグと入れ替えています。 A.修正いただきありがとうございます。<dl>タグを修正したところCSSもうまくいきました。

  • dell_OK
  • ベストアンサー率13% (776/5747)
回答No.1

前回の質問の補足(2022/03/21 15:35)で質問者さまのカスタムフィールドの追加方法を教えていただきました。 //従来のウィジェットエディターに戻す // ウィジェット追加 私が使い方をわかっていないのもあって、正常に動作しているかどうかもわからない状態です。 参考にされたサイトがあれば教えてください。 それと、いまさらですが、ご利用中のWordPressのバージョンを教えてください。

php_learn
質問者

お礼

すみません。コメント欄とは別に最近のコメントを出力したいのですが、どうしても同じものが4回表示されてしまいます。違うものを4件表示したいのですが、下記のコードについて原因はわかりますでしょうか? <!--最近のコメント--> <?php $args = array( 'author__not_in' => '1', 'number' => '4', 'status' => 'approve', 'type' => 'comment' ); $comments_query = new WP_Comment_Query; $comments = $comments_query->query( $args ); // Comment Loop if ( $comments ) { foreach ( $comments as $comment ) { // 記述が長いので $pid に入れておく $pid = $comment->comment_post_ID; // 必要な文字列データの取得 $url = get_permalink($pid); $img = get_the_post_thumbnail($pid , array('class' => 'myClass')); $date = get_comment_date('(Y/n/d)', $comment->comment_ID); $title = get_the_title($pid); $text = get_comment_text($comment->comment_ID); $user_id = $comment->comment_author; // デフォルト値で初期化して $user_id = '名無しさん(anonymous)'; if (!empty($comment->comment_author)) { $user_id = $comment->comment_author; } elseif (!empty($comment->user_id)) { $user_id = $comment->user_id; } ?> <!-- 表示部分 --> <dl class="mycomment"> <div class="side-title">最近のコメント(comments)</div> <div class="commentlist"> <dt class="imgcomment"><a class="commentheight" href="<?= $url ?>"><?= $img?></a></dt> <dd class="commentnumber"> <a href="<?= $url ?>"><?= $title ?></a> <span class="comment"><?= $text ?></span> <span class="comment_id"><?= $user_id ?></span> <span class="my_author"><?= $date ?></span><br> </dd> </div> <?php } } else { echo 'コメントなし'; } ?> </dl> </div>

php_learn
質問者

補足

// ウィジェット追加 https://www.webdesignleaves.com/pr/wp/wp_widgets.html ウィジェットエディターに関しての参考サイトはブックマークしておらずわかりませんでした。 おそらく投稿記事画面を旧式のものにしただけですね。 https://olein-design.com/blog/tried-wordpress-5-8-beta-1 下記のコードも追加しております。 // 投稿固定ページを旧式のエディターに戻す add_filter('gutenberg_can_edit_post_type', '__return_false'); //Gutenbergプラグイン用 add_filter('use_block_editor_for_post', '__return_false'); //WordPressブロックエディター用 wordpressのバージョンは最新の現在のバージョン: 5.9.2です。 現在のダッシュボードの画像は下記になります。 https://imgur.com/Xp3jG1p.jpg https://imgur.com/AV0wkSF.jpg

関連するQ&A