ワードプレスのテーマの中には、記事の上とか下とか、ツイートボタンやはてブボタンが表示されるタイプのテーマがありますよね
大半がそうだと思います。
あるとき、特定の記事だけツイートボタンやはてブボタンから発信されるURLとかテキストが、意図しないものになっていたことがあったので、その問題が発生したときの状況と、そのときの解決方法を紹介します。
ツイートボタンのテキストやURLはどうやって取得しているか
第一に、ツイートボタンの設置に使うURLがこちら。
https://twitter.com/intent/tweet?text=【添えたいテキスト】&url=【現在のページのURL】
基本形がこれです。
大抵の場合、添えるテキストには記事タイトルが入ると思います。
僕が使っているテーマはsimplicity2なのですが、このテーマもそうです。
WordPressの場合、現在の記事タイトルだったり現在のページURLはテンプレートタグで簡単に取得できるので、普通は以下のようなテンプレートタグが使用されていると思います。
<?php the_title(); //現在の記事タイトル ?>
<?php the_permalink(); //現在のページURL ?>
添えるテキストやURLをこのタグで出力しているのだから、今回の問題の原因はこれに関係している部分にあるということになります。
問題が起きていたのは「特定のカテゴリ一覧を出力しているページ」だった
この二つのタグたちはそれぞれ、現在の記事タイトルだったり現在のページURLが入っているわけですが、それは初期値でしかありません。
つまり初期値が入っていれば普通は今回のような原因で、この問題は起きないわけです。
僕の場合、特定のページでしかこの問題は起きていません。
phpの中身を見てみると、その問題が起きているのは、やはり決まってthe_titleやthe_permalinkに別の内容を代入しているページだったのです。
どんなページかというと、ずばり「特定のカテゴリ一覧を出力しているページ」です。
僕のブログはお知らせ一覧とかはないんですけど、WordPressでお知らせ一覧みたいなリストを作るとき、「お知らせ」というカテゴリ一覧をしぼって表示してくれるコードを書くと便利ですよね
お知らせというカテゴリを作成して、そこにお知らせ記事を上げていくだけですみますので。
僕が特定のカテゴリの一覧を出力するのに参考にしたのがこちらのページです。
実はこのページ、少し初心者に優しくないです。
このページで紹介されているforeach文なのですが、ループ内でsetup_postdata($post)を記述しているのにも関わらず、その中身をリセットする方法が書かれていないんですよ。
つまりこのforeach文をそのまま真似ると、foreachによって最後に出力したページのタイトルとURLが、the_titleとthe_permalinkで出力される状態が継続します。
僕の場合、小説の目次ページとサイトマップでこのforeach文を拝借していたのですが、ツイートボタンを押したときに発信される情報が最新話だったり、一番新しい記事だったりしたので、なんでだろうなーとか思っていました。
対処法
ツイートボタンが来る前に、setup_postdataをリセットして初期値に戻します。
<?php wp_reset_postdata(); ?>
これがそのタグです。
setup_postdataを使い終わったら、最後にwp_reset_postdataを記述しろってことですね。
コメント