サポート » 使い方全般 » 「 mb_strimwidth」と「strip_tags」の組み合わせ方

  • 下のコードは、本文の出力時に
    ➀「改行タグ」と「スパンタグ」だけを残して、
    ➁100文字で出力する。
    というつもりで書いたコードなのですが、

    <?php 
    $content_input = get_the_content();
    $content_limit = mb_strimwidth($content_input, 0, 100, '…', 'UTF-8');
    $content_tags = strip_tags( $content_limit, '<br><br />');
    echo '<p>'.$content_tags.'</p>';
    ?>

    これだと、改行が1つの場合はきちんと1回改行されるのに、改行が連続する場合は一回も改行されません。
    あと文字数もよくわからない数で100きっかりでなかったりもして、法則がわからず混乱しています…。

    その辺りを修正し、

    ➀「改行タグ」と「スパンタグ」だけを残して、
    ➁全角でも半角でも絵文字でも(スペース以外なら)とにかく100文字きっかりにする。

    という目的のためにはどうしたらよろしいでしょうか?

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • @puniler

    「改行が連続」というのが「WordPressの管理画面のテキストエディタで改行が連続」という意味なら、それはpタグに変換されます。

    これが1行目
    これが2行目
    

    上記の変換結果は次のようになります。

    <p>
    これが1行目<br/>
    これが2行目
    </p>
    

    で、次が改行連続の場合。

    これが1行目
    
    これが2行目
    

    上記の変換結果は次のようになります。

    <p>
    これが1行目
    </p>
    <p>
    これが2行目
    </p>
    

    ご要望に沿っているはともかく、strip_tagsのタグでpタグも追加し、出力するときにdivでくくればいいんじゃないでしょうか。

    なるほど。

    wordpress標準機能によってまずPタグに変換されて、しかしそのPタグをstrip_tags()で削除してしまっていたわけですね。

    だからPタグも許可してはどう?と。

    なるほど。ありがとうございます。

    ただそうすると改行を2回やっても3回やってもPタグ1つ分の高さになってしまいますね。
    うーん。考えてみます。

    文字数の方はいかがでしょうか??

    こんにちは、

    文字数が合わない問題は、mb_strimwidthが、html要素交じりの文字長で、切り取っているため文字数が合わないんじゃないですか?

    そのあとに、strip_tagsをかけているので、タグ分の文字数は削られます。

    ワードプレスの関数に、wp_html_excerpt( );というのがありますが、これはタグ除去後に、文字数を切り出すので、たぶん文字数的には、合いやすくなります。

    しかし、strip_tags()みたいに、許可タグを指定する機能はありません。また&#9855;Lorem ipsum dolor sit amet, consectetur等の場合、&#9855;は7文字として読み込まれますので、

    なので、正確に、、、というのは結構ハードルが高いと思います。

    CSSなどと組み合わせて考えてみては、どうでしょうか?

    • この返信は8 ヶ月、 1 週前に  nobita さんが編集しました。

    @puniler

    ショートコードを除去して構わない(=データベースに保存されている内容そのままで構わない)のであれば、次のやり方でいけないですかね。

    // ループ内で実行。そうでない場合、$post->post_content が行方不明に。
    $raw_content     = strip_tags( strip_shortcodes( $post->post_content ) );
    $limited_content = mb_strimwidth($raw_content, 0, 100, '…', 'UTF-8');
    $tagged_content  = nl2br( $limited_content );
    echo wp_kses_post( '<p>'.trim( $tagged_content ) .'</p>' );
    
    • この返信は8 ヶ月、 1 週前に  Takahashi Fumiki さんが編集しました。

    @nobitaさま、こんにちは。
    なるほど、タグ分削られたり、特殊文字がそのままカウントされたり、という原因でしたか。
    一応現状ではJSによってHTML入力や文字数オーバー時にエラーを表示するようにはしているのですが、それでも一応対策をと思いまして。とは言え、データ保存時にそれらを制限する方法が分からず、仕方なく出力時の制限方法を模索している。という次第です。
    それにしても厄介そうですね。アドバイスありがとうございます。

    @takahashi_fumikiさま、たびたびありがとうございます。
    はい、仰るようにショートコード不要で、まさに「データベースに保存されている内容そのままで構わない」という感じです。
    コード試させて頂きました。「改行2回や3回」が「1回」として出力されてしまいますけれど、今のところ最もやりたいことに近づいた感じです。
    ありがとうございます。m(__)m

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「「 mb_strimwidth」と「strip_tags」の組み合わせ方」には新たに返信することはできません。