Help us understand the problem. What is going on with this article?

WordPressでDisqusコメントをログインしたユーザーだけに表示する方法

More than 1 year has passed since last update.

この記事の要点

  • 既存のコメントをDisqusに移行する方法(大した説明はありません)
  • 会員だけに、コメントを表示するためのカスタマイズ
    1. 子テーマを用意する
    2. comment-disqus.php を作る
    3. single.php などの comments_template(); を書き換える

背景

WordPressで会員サイトを構築し、積極的にコミュニケーションする仕組みを作ったら、思った以上に大量のコメントが投稿された。

WordPressのコメント機能が思った以上に使いづらく・・・、議論が追いづらく、コメントを把握しづらい。

そこで急遽、Jetpack、Muut、Disqus などを試した結果、 Disqus を採用。

その後、Disqusプラグインを導入するも、「会員サイトログインしてなくても、Disqusが表示されてしまう」ため、その問題を解決するために、WordPressをカスタマイズ。

その方法を記載します。

(1) 既存のコメントをDisqusに移動する

Disqus が、WordPressプラグインを利用します。インストール方法は、いろんなサイトに書いてあるので参考にセットアップします。

既存のコメントを取り込むには、

コメント > Disqus > Setting > Import を使う。

disqus-export.png

(2) Disqus プラグインを停止する

Disqusプラグインは、おそらく comments 系のフィルタなりをフックして入れ替えているので、WordPressの会員サイトプラグインなどによる「閲覧制限」を無効にしてしまうと思われます(ソースをチェックしていないので・・・推測)。

その結果、会員ログインしていなくても、コメントが見れてしまうので、別の方法を使う。そのため、Disqusプラグインは、インポートのためだけに使って用済みとする。

(3) 子テーマを用意する

現在使っているテーマの子テーマを用意する。大抵の場合、配布元で配っていたりする(多分)。なくても、子テーマの作り方を参考に、作ればOK。

(4) single.php 、page.php などをカスタマイズ

親テーマから、single.php や page.php を子テーマにコピーする。

コメントを表示している箇所があるので探す。以下のような記述。

<?php comments_template(); ?>

これは、WordPressの関数で、 comments.php を呼び出すもの。引数を指定することで、ほかのファイルを読み出すことができる。そこで、以下のように修正。

<?php comments_template('/comments-disqus.php'); ?>

(5) comments-discus.php を作成

子テーマ内に、comments-discus.php を作成する。
中身は、以下の通り。

<?php

if( is_user_logged_in() )
{   

?>
<div id="disqus_thread"></div>
<script>
    /**
     *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
     *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables
     */

    var disqus_config = function () {
        this.page.url = '<?php echo get_the_permalink(); ?>';  // Replace PAGE_URL with your page's canonical URL variable
        this.page.identifier = '<?php echo get_the_ID(); ?> <?php echo site_url().'/?p='.get_the_ID(); ?>'; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
    };

    (function() {  // DON'T EDIT BELOW THIS LINE
        var d = document, s = d.createElement('script');

        s.src = 'https://C-H-A-N-G-E--H-E-R-E.disqus.com/embed.js';

        s.setAttribute('data-timestamp', +new Date());
        (d.head || d.body).appendChild(s);
    })();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
<?php

}

?>

ポイント1 : 認証部分

if分の条件を参考にしてください。

今回、Simple WP Membership を使って会員サイトを作っていました。ざっと見たところ、このプラグインでのユーザー認証、権限チェックの方法がドキュメントになかったので、「ログインできている、できていない」というザックリとした基準で、表示、非表示を切り替えることにしましいた。

Restrict Content Proなどだと、関数が用意されていて、ドキュメントを参考に、条件を設定するのが簡単。

ポイント2 : disqus_config の設定

DisqusのWordPressプラグインを調べると、disqus_config の page.urlpage.identifier の仕様に合わせると、上記のソースのようになる。

page.identifier は、post_id と p?=post_id のパーマリンクを使う設定になっていましたので、上記のようにしています。

このような設定にすることで、先に取り込んだDisqus上のWordPressのコメントと紐づくようになるので、無事、表示されます。

(6) functions.php に、コメント数用のスクリプトを追加

適宜、関数名を変更して利用してください。 functions.php に以下を追加します。

// Disqus のコメント数のためのjavascript
function dsq_cnt_js()
{
    echo <<<EOD
<script id="dsq-count-scr" src="//C-H-A-N-G-E--H-E-R-E.disqus.com/count.js" async></script>
EOD;
}
add_action( 'wp_footer', 'dsq_cnt_js');

上記のソースをそのままコピペするのではなく、 disqus のサイトを識別するサブドメインを設定してください。

あとがき

昔取った杵柄で、プログラミングは「必要に駆られて、最低限」だけ行います。WordPressも、普段はほとんどカスタマイズすることもありません。

そんなこんなで、たまに触って見たときに、「いやー、便利に作られているなー」と感心します。また、ドキュメントも揃っているので、調べやすい(見づらいですが)ですね。

もっといい方法があれば、是非教えてください。

( comment 関連のフィルターで、なんとかするとか? (functions.phpでやっつける方法))

toiee_kame
人の学習メカニズムを研究し、応用することを行なっています。プログラミングの学習プロセス設計も。そんなこんなで、Qiitaに参加して見てます。開発に直接、役立つノウハウは持ってませんが、役立ちそうなことがあれば、貢献したいと思っています
https://toiee.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした