サポート » 使い方全般 » 未承認のコメントを表示させた際、スマホのみページャーがおかしい

  • 解決済 msthings

    (@msthings)


    現在wp_list_commentsを使って1ページに20件ずつコメントを表示させてページ分割を行っています。callback関数を使い、未承認のコメントを吐き出す際に、コメント本文の代わりに「このコメントは削除されました」という文言を表示させています。

    現時点でどのような症状か説明します。
    ある記事に承認済みのコメントが38件、未承認のコメントが3件、計41件のコメントがあります。1ページに20件ずつ表示させていますのでページ数は3ページ目まであるはずですが、スマホ(iOS、Android両方)で見るとページャーが2までしか表示されず、最後の1件の表示ができません。
    example/archive/123/comment-page-3に直接飛んでもコメントは表示されません。
    PCでは問題なく表示されています。PCでユーザーエージェントをスマホにしても問題なく表示されています。

    未承認のコメントを非表示にしたらスマホでも正常に表示されました。
    ページャーはpaginate_comments_links()を使っています。
    これが承認済みのコメント数から計算しているからだと思ったのですが、
    なぜスマホだけ正常に表示されないのでしょうか・・・?

    もしくはPC表示が異常でスマホでの表示が正常なのでしょうか。

    【追記】
    該当のコードになります。

    <?php
    	$orderby_comment = get_query_var('orderby_comment');
    	$id = get_the_ID();
    	$args = array(
    		'per_page' => '20',
    		'type'		=> 'comment',
    		'callback'	=> 'my_comment_list',
    	);
    	if ( $orderby_comment ) {
    		$comments = get_comments(array(
    				'post_id' => $id,
    				'order'   => 'ASC',
    				'status'  => ''
    		));
    	} else {
    		$comments = get_comments(array(
    				'post_id' => $id,
    				'order'   => 'DESC',
    				'status'  => ''
    		));
    	}
    ?>
    <?php if ( have_comments() ): ?>
    	<ol class="commets-list">
    		<?php wp_list_comments( $args, $comments ); ?>
    	</ol>
    <?php endif;?>
    
    <?php if ( $wp_query -> max_num_comment_pages > 1 ): ?>
    	<div class="pagelink">
    		<?php
    			$args = array(
    			'prev_text' => '«',
    			'next_text' => '»',
    			);
    			paginate_comments_links($args);
    		?>
    	</div>
    <?php endif; ?>

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • モデレーター Daisuke Takahashi

    (@extendwings)

    ログインしているかどうかなどの差異はありませんか?
    また、プラグインをすべて無効化し、確認してみてください。

    トピック投稿者 msthings

    (@msthings)

    ありがとうございます!
    試して見たところ、ログインしている場合は問題なく、
    ログインしてない状態だとページャーがおかしくなっていました。
    プラグインをすべて無効化は試しましたが、これは特に関係ないようでした。

    となると、ログインしている時としていない時でコメントのカウント方法が違うのでしょうか?

    $comments に入るコメント数はログイン状態と無関係に決まりますよね。

    でも(この先は検証していないのですが)
    paginate_comments_links() と have_comments() はメインクエリ($wp_query)からコメント数をもらうので、$comments のコメント数より少なくなる場合があると思います。ログインしていなければ未承認コメントはカウント外のはず。

    役立つかどうかわかりませんが pre_get_comments というアクションがあるそうです。
    [WordPress]pre_get_commentsによるコメントの抽出・検索方法 | Wood-Roots.blog

    トピック投稿者 msthings

    (@msthings)

    >gblsmさん

    こちらでもありがとうございます。
    該当リンクも拝見しました。
    確かに$commentsは未承認コメントを含んでいて、$wp_queryには未承認コメントはカウントされていませんでした。

    そうなるとpre_get_comments()のoffset等を使ってページャーを自作するしか方法はなさそうでしょうか?

    トピック投稿者 msthings

    (@msthings)

    >gblsmさん

    教えて頂いたリンクの記事を参考にpre_get_comments()でinclude_unapprovedパラメータをtrueで設定したところ、ログインしていない状態でも正常に動作するようになりました!助かりました!
    ちなみにget_comments()に同じパラメータを設定しても変化はありませんでした。

    お二人ともありがとうございました!
    解決済みにさせていただきます。

    モデレーター jim912

    (@jim912)

    paginate_comments_links には、total というパラメータがあり、デフォルトでは、get_comment_pages_count 関数の返り値を利用するようになっています。

    このtotal パラメータを明示的に指定するようにすれば解消可能と思われます。

    トピック投稿者 msthings

    (@msthings)

    >jim912さん

    ありがとうございます。そちらを試してみたのですが、ページャーはきちんと最後まで表示されるものの、最後のページに飛んでもコメントは何も表示されない状況でした・・・。

    モデレーター jim912

    (@jim912)

    すみません、見逃していました。

    have_comments 関数ですが、$wp_query の値で判定されてしまうので、直前の get_comments の結果を反映しないですね。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「未承認のコメントを表示させた際、スマホのみページャーがおかしい」には新たに返信することはできません。