サポート » 使い方全般 » the_contentにフック

  • 各記事などの最上部に要素を追加しようと、AddThisやWP Touch等のプラグインでどのようにフックを掛けているか調べてみたところ、どうやら the_content にフックして実装していたようでした。

    そこで同様にthe_contentにフィルターフックを掛けてとりあえずの実装は出来たのですが、テストをしていて次の問題が発生しました。

    • feedにも挿入される
    • ダッシュボードの投稿一覧(wp/wp-admin/edit.php?mode=excerpt)にも挿入される

    ひとまずこれらは応急処置としてis_admin(),is_feed()を使用し回避させました。

    これらのように

    add_filter( 'the_content', 'custom_content' );

    が作用してしまう箇所は他にもあるのでしょうか。

    またこの問題を確認していた際にもう一つ気になったのですが、Jetpackの共有ボタンが

    フロントページ、アーカイブページ、検索結果ページ

    で有効になっていた際、先程と同様、ダッシュボードの投稿一覧に表示されるようです。

    (スクショです: http://wp.me/a4FKrb-2l )

    これは意図されている動作なのでしょうか…それとも例外処理を忘れているだけの単純なバグなのでしょうか…どう思いますか?

    ※なおこれらの問題はローカルテスト版で確認しました。公開している方でも同様の結果が確認できましたが。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • こんにちは、

    スクリーンショットを見ると、リンクになっているように見えるのですが、リンクになっていますか?

    wp/wp-admin/edit.php?mode=excerpt

    は、クエリがexcerptになっている通り、html要素が取り除かれているのが普通ではないかと思います。
    りンクになっているなら、the_contentフィルタの使い方に問題があるのかもしれません。

    add_filter( 'the_content','my_content');
    function my_content( $content){
      //  エコーは、フィルタでは使いません リンクになって表示されます
        echo '<a href="http://example.com/">example</a>';
       //return させるのが正しいです テキストだけが表示
        return $content.'<a href="http://example.com/">example</a>';
    }

    ジェットパック使っていないのですが、Jetpackの共有ボタンがリンクで表示されているのだとすると、変な感じですね

    リンクになってますね…

    該当部分のコードは https://github.com/Automattic/jetpack/blob/master/modules/sharedaddy/sharing-service.php#L466-L616 ですかね…

    the_content第2引数を持ってるわけないはずだし

    add_filter( 'the_excerpt', 'sharing_display', 19 );

    19が遅いのか?とかいうのも気になるのですがそうでも無いのかな…

    コードを見ると、わざとそうしているみたいですね

    ありがとうございます。

    リンク解除させない→検索結果ページ等でリンク(ボタン)を表示させる設定なんだからただの文字になったら意味がない、ってことですね。

    (ダッシュボードは気にしていないのはどうなんだろう…………)

    この機会に先程のコードを読み返してみて1つめの問題(このトピックを建てた本意、『add_filter the_conten
    が作用してしまう箇所は他にもあるか』)はとりあえず最初に示した2つで良さそうかなって結論に至りましたが…………いいのか…………?

    このダッシュボード問題は報告しておくべきなのかな…………

    バグというようなものではなさそうなので、

    後は個別に sharing_enabled フィルタなどを使って、コントロールしてくれってことだと思います。

    WordPress のトップディレクトリで、grep すると、apply_filters( 'the_content', *) している場所は、次の 4 か所ありました。

    • wp-includes/comment.php => 2101 行目 do_trackbacks() 関数
    • wp-includes/feed.php => 181 行目 get_the_content_feed() 関数
    • wp-includes/formatting.php => 2402 行目 wp_trim_excerpt() 関数
    • wp-includes/post-template.php => 211 行目 the_content() 関数

    post-template.php 以外は、全て excerpt がらみです。Jetpack は strip_tags() されないためにわざとやってますから、放っておいていいのではないでしょうか。いつごろか忘れましたが、英語版フォーラムでは、remove_filter() して、表示したい場所に、直に sharing_display() するといいよ、みたいな人もいましたが。

    >kjmtshさん

    ありがとうございます。

    やっぱり自分で確認してみたのと同じところがヒットしてる感じですね…………(当たり前か)

    do_trackbacksだけ少し気になるのですが、フィルターでコンテンツの頭にボタン(<a>のリンクです)を追加することによって何か影響はあったりしないのでしょうか。(実質的に消えてくれるのなら理想)

    英語版フォーラムでは、remove_filter() して、表示したい場所に、直に sharing_display() する

    そう言えばこれを日本語でブログで書いてる人先日見かけました…………(英語フォーラムからの輸入だっけ…………)

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「the_contentにフック」には新たに返信することはできません。