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

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

ただいまの
回答率

90.02%

ワードプレスでトップページを最新の投稿にした場合にコメント欄を表示させたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 259

oka02

score 7

前提・実現したいこと

ワードプレスでトップページの設定を固定ページでなく、最新の投稿を表示させています。
個別ページに出てくるコメント欄をトップ下にも表示させたいです。
すみませんが、よろしくお願いいたします。

テーマ:Twenty Seventeen2.0

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

<?php comments_template(); ?>
これをindex.phpに入力しても、コメント欄が表示されません。

呼び出し方法が間違っているのでしょうか。

逆に、comments.phpのコードをコピーして直に書き込んでみたところ、表示はされるのですが、
試しにコメントを入力してみましたが、入力したコメントが別のページに表示されてしまいトップページに溜まらない状態です。

該当のソースコード

<?php

get_header(); ?>

<div class="wrap">
    <?php if ( is_home() && ! is_front_page() ) : ?>
        <header class="page-header">
            <h1 class="page-title"><?php single_post_title(); ?></h1>
        </header>
    <?php else : ?>
    <header class="page-header">
        <h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
    </header>
    <?php endif; ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

            <?php
            if ( have_posts() ) :

                /* Start the Loop */
                while ( have_posts() ) :
                    the_post();

                    /*
                     * Include the Post-Format-specific template for the content.
                     * If you want to override this in a child theme, then include a file
                     * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                     */
                    get_template_part( 'template-parts/post/content', get_post_format() );

                endwhile;

                the_posts_pagination(
                    array(
                        'prev_text'          => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
                        'next_text'          => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
                        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
                    )
                );

            else :

                get_template_part( 'template-parts/post/content', 'none' );

            endif;
            ?>
<?php comments_template(); ?><!-- ここに表示させたいです -->
        </main><!-- #main -->
    </div><!-- #primary -->
    <?php get_sidebar(); ?>
</div><!-- .wrap -->

<?php
get_footer();


ーーーーーーーーーー↓↓↓追記後↓↓↓ーーーーーーーーーー

<?php

get_header(); ?>

<div class="wrap">
    <?php if ( is_home() && ! is_front_page() ) : ?>
        <header class="page-header">
            <h1 class="page-title"><?php single_post_title(); ?></h1>
        </header>
    <?php else : ?>
    <header class="page-header">
        <h2 class="page-title"><?php _e( 'Posts', 'twentyseventeen' ); ?></h2>
    </header>
    <?php endif; ?>

    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">

            <?php
            if ( have_posts() ) :

                /* Start the Loop */
                while ( have_posts() ) :
                    the_post();

                    /*
                     * Include the Post-Format-specific template for the content.
                     * If you want to override this in a child theme, then include a file
                     * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                     */
                    get_template_part( 'template-parts/post/content', get_post_format() );

                // If comments are open or we have at least one comment, load up the comment template.
                if ( comments_open() || get_comments_number() ) :
                    comments_template();
                endif;

                endwhile;

                the_posts_pagination(
                    array(
                        'prev_text'          => twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '<span class="screen-reader-text">' . __( 'Previous page', 'twentyseventeen' ) . '</span>',
                        'next_text'          => '<span class="screen-reader-text">' . __( 'Next page', 'twentyseventeen' ) . '</span>' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ),
                        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyseventeen' ) . ' </span>',
                    )
                );

            else :

                get_template_part( 'template-parts/post/content', 'none' );

            endif;

            ?>

        </main><!-- #main -->
    </div><!-- #primary -->
    <?php get_sidebar(); ?>
</div><!-- .wrap -->

<?php
get_footer();

試したこと

・ワードプレス管理画面で、ディスカッション表示させ、全てのページでコメント許可にしています。
・一般>ディスカッション設定も許可状態になっています。
・管理画面>カスタマイズ>ホームページ設定>最新の投稿を選択しています。
・下から8行目にコメントのphpを入れてみたのですが表示されません。

補足情報(FW/ツールのバージョンなど)

ワードプレスver、4.9.9
テーマ:Twenty Seventeen2.0

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

comments_template()関数はループ内でコールする必要がありますので、
single.phpを参考に
get_template_part( 'template-parts/post/content', get_post_format() );
の直下あたりに記述してください。

しかしながら、comments_template()関数は関数内で表示できる場所を制限しているので、
トップページにはコメントは表示しないようになっています。

なので、目的を満たすためにはコメント表示関数を自作する必要があります。
wp-includes\comment-template.php
を参考にfunctions.php等に実装してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/04 16:13

    ご教授いただきありがとうございます。
    途中の箇所にsingle.phpの呼び出し方を参考に入れました。
    (該当のソースコードに追記しております)

    また、自作に関して知識不足で申し訳ないのですが、
    現在4記事が最新の投稿としてトップページに表示されていて、
    その各記事の下にコメント欄がそれぞれ表示されるようにする為に、

    functions.phpに実装について、wp-includes\comment-template.phpを見てみたのですが、具体的にどういった実装をfunctions.phpに行えばよろしいのでしょうか。

    キャンセル

  • 2019/02/05 08:18

    あまり良い実装方法ではありませんが、
    functions.phpにmy_comments_template()といような名称でcomments_template()関数
    をそのままコピーして、
    冒頭の以下のif文を削除すればとりあえずはトップにも表示されるようになります。
    if ( !(is_single() || is_page() || $withcomments) || empty($post) )
    return;

    キャンセル

  • 2019/02/11 16:27

    ご連絡遅くなり申し訳ありません。
    現状あるcomment-template.phpのバックアップをとって、教えていただいた
    if ( !(is_single() || is_page() || $withcomments) || empty($post) )
    return;
    の箇所をコメントアウトして削除し、
    index.phpのget_template_part( 'template-parts/post/content', get_post_format() );下にsingle.phpのコメント呼び出しをコピペしたところ、
    最新の投稿でもうまく全ての投稿に対してコメントが表示されるようになりました。
    この度はご教授いただきまして、ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.02%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる