サポート » 使い方全般 » the_excerpt()関数の挙動について確認したい

  • 解決済 minamin

    (@minamin)


    掲題の通りthe_excerpt()関数の挙動がCodexの解説の通り動作していないようでしたので、ここで質問させていただきます。

    【環境】
    ・レンタルサーバー内に設置
    ・PHP/SQLバージョン:5.2.12/5.0.51a-log
    ・WordPressバージョン:3.4.2-ja
    ・動作プラグイン:
    Akismet/Collapsing Archives/Crayon Syntax Highlighter/Disable Revisions/Enhancing CSS/Google Analyticator/Google XML Sitemaps/Ktai Style/PS Disable Auto Formatting/Search Meter/Slickr Flickr/Socialize/TimThumb Vulnerability Scanne/WP-Juicebox/WP-Table Reloaded/WP Multibyte Patch
    ・確認ブラウザー:IE9, Firefox15(Win)

    【問題】
    現在私のWordPressサイトではOGP生成を半自動で行なうために、header.php内に関数を使ってOGP情報を入力しています。
    その中でページが[記事]だった場合には下記のコードを出力するようにしていました。
    <meta property="og:description" content="<?php the_excerpt(); ?>" />
    ところが、いつのバージョンか特定できていないのですが、ページの先頭部分に記事が混入して表示がおかしくなっていました。
    「WP Multibyte Patch」を除くすべてのプラグイン&テーマを停止、キャッシュ削除してみても改善は見られませんでした。

    【解析】
    ソースを見てみると該当のog:descriptionのcontentの中身にHTMLタグを含んだ55文字以上の内容が入り込んでいるためでした。
    下記Codexの説明によれば、(more)までの記述をHTMLのタグや画像を除去した状態の55文字を抜き出す…とあるのですがうまく動作していないように見えます。
    http://codex.wordpress.org/Template_Tags/the_excerpt

    55文字の制限については日本語がマルチバイトであるため仕方ないと思うし、そのための「WP Multibyte Patch」だと思っているのですが、HTMLのタグが混入しているのが不思議です。

    【現状】
    metaタグの中に本文注のHTMLタグを含む内容が混入するのは見た目にも構文的にもよろしくないので、現在はstrip_tags関数を使い下記の通り除去しています。
    <?php if(has_excerpt()){echo strip_tags(get_the_excerpt());} else {echo mb_substr(wp_kses(get_the_content(), $allow_tags),0,100);} ?>" />
    ($allow_tagsの中身は空)
    出力されたdescriptionもなんだかなぁという感じなので将来的にはマニュアル入力しようと思っています。

    で、最初に戻るのですがthe_excerpt()関数を使っていらっしゃるみなさんはきちんと動作していますでしょうか?

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 詳しくは見てないのですが、
    wp-includes/feed.php (177行目) では以下のようにしてますね。
    期待通りになるかもです。

    $output = get_the_excerpt();
    echo apply_filters('the_excerpt_rss', $output);
    モデレーター Seisuke Kuraishi (tenpura)

    (@tenpura)

    WP Multibyte Patch をお使いの場合に自動生成される投稿抜粋のデフォルトの長さは、110文字です。その他に関しては以下 Codex の説明の通りです。

    If you do not provide an explicit excerpt to a post (in the post editor’s optional excerpt field), it will display an automatic excerpt which refers to the first 55 words of the post’s content. Also in the latter case, HTML tags and graphics are stripped from the excerpt’s content.

    抜粋欄が空の場合は、WP Multibyte Patch を使っていてもいなくてもHTMLタグが取り除かれた形で抜粋が自動生成されます。
    そして抜粋欄が空でない場合は抜粋欄の内容がそのまま出力されます。

    こんにちは

    私の環境では、WP Multibyte Patch あり では、110文字(日本語)、なしだと55文字(日本語)でした。
    自動的な抜粋では、htmlは除去されていました。(index.phpとかのリスト形式のループの中)
    抜粋欄入力は、そのまま。

    ( WordPress 3.4.2 日本語版 マルチサイト )

    the_excerpt フィルタは、プラグインだけでなくテーマなどでも使うので、テーマでフックを使って何かしていないか調べてみるといいんじゃないかと思います。

    To:Takayuki Miyauchiさん

    コメントありがとうございます、なるほど確かにfeed.phpで出力されるものは正しく取得できているようですね。
    ただこちらはget_the_excerpt()を使ってるようです。
    またもやCodexで調べてみたのですが、こちらの方が用法としては正解なんでしょうか、the_excerpt()関数だと段落や改行まで含まれてしまうようですね。

    To:Kuraishiさん

    おぉありがとうございます、なるほどWP Multibyte Patchを使っている場合は抜粋される文章の長さはディフォルトで110文字に設定されるんですね、勉強不足でした。
    the_excerpt関数については、もしかしてマルチバイトが関連してなにかの文字が特定の条件で文字化けするのでは…と思っていたんですが(関数の処理の中でマッチング時に化けるなど)テーマでなんらかの問題がある可能性もあるので、もう少し調査してみます。

    To:nobitaさん

    はじめまして、わざわざお調べいただきありがとうございます。
    Kuraishiさんもご指摘いただきましたが、WP Multibyte Patchの標準設定で110文字になるようですね。(バイトでなくて文字でカウントするところがすごいですね)

    he_excerpt関数はテーマも関連があるとのこと、情報ありがとうございます。
    使用しているテーマ側でなにかフックがかかって処理を行っていないか調査してみます。

    今回の件で初心者ながら色々調べてみてしらないことが沢山ありました。
    まだまだphpの関数処理については駆け出しのところもありますが、これを機会になにげなく使っているプラグインやテーマがどんなことをしているのか、勉強してみようと思います。

    回答いただいたお三方ありがとうございました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「the_excerpt()関数の挙動について確認したい」には新たに返信することはできません。