• いつもお世話になっております
    記事の文字数を制限すると記事に表示した画像が消えるのですが、
    記事に画像があった場合、文字数範囲内だったら画像を表示したいのですが、
    仕様上難しいのでしょうか。

    今現在は

    <?php query_posts('cat=4&posts_per_page=10&paged='.$paged); ?>
    <?php
      if(have_posts()): while(have_posts()):the_post();
    ?>
     <?php echo mb_substr(get_the_excerpt(), 0, 300); ?><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">続きを読む⇒</a>
    
    <?php endwhile; else: ?>

    として文字数以上だったら文末に「続きを読む⇒」と表示し、リンクさせるようになっておりますが、文の始めに画像を掲載しているのですが、表示されなく困っております

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • モデレーター gatespace

    (@gatespace)

    get_the_excerpt(the_excerpt())はHTMLタグを除去した文字列を返します。

    http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_excerpt
    http://wpdocs.sourceforge.jp/Template_Tags/the_excerpt

    get_the_excerpt(the_excerpt())を併用して画像出したいならアイキャッチ画像を使った方が良いです。

    あと mb_substr 使わなくても字数制限できます

    トピック投稿者 sensensen

    (@sensensen)

    gatespaceさん、
    いつもありがとうございます。アイキャッチで画像出力も良いのですが、
    投稿記事の内容にある画像を表示しつつ、文字数制限をして続きを見せるようにしたいのですが、
    やはり難しいですかね。

    こんにちは、

    The_content()を利用していただき、以下のフィルタを使ってみてください

    http://tenman.info/labo/snip/archives/2790

    やっていることは、トップページで、タグ交じりの投稿本文から、タグは無視して、文字列の長さを抽出して
    一定の文字列の長さのところまでは表示して、それ以前のタグの閉じていないところを閉じなおして表示するものです。

    打ち切られる範囲の前方にある画像等は、表示されると思います

    http://tenman.info/labo/snip/ 

    では、大体同じスクリプトでトップページの表示を行っていますので、どのようになるかご確認されるといいと思います

    自前でやるなら the_excerpt()は使わないで

    the_content フィルタと

    // 許可するタグを指定できます
    strip_tags($text, '<p><a>');

    wp_html_excerpt()

    を組み合わせるとできるのではないかと思います。

    トピック投稿者 sensensen

    (@sensensen)

    nobitaさま、お世話になっております。
    早速
    function.phpに記述を行い、

    「front-page.php」に

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    	<article id="post-<?php the_ID(); ?>" class="content">
        <div>
    		<?php the_content(); ?>
        </div>
        <?php wp_link_pages('before=<p id="pageLinks">ページ:&after='); ?>

    と記述しましたが、
    文字数制限ができていなかったので

    mb_substr(strip_tags($post-> </span>post_content),0,200); ?>

    としましたが、文字数制限はされたのですが、
    画像が表示されません、、、、

    front-page.php
    をTOPにしているのがいけないのでしょうか。。。

    と記述しましたが、
    文字数制限ができていなかったので

    アップデートを重ねながら、一年半以上、動いていますけど なぜですかね?

    念のため、別のWordPressで動作確認しましたが、動作しているみたいでした。

    strip_tagsの二番目の引数が指定されていません

    トピック投稿者 sensensen

    (@sensensen)

    strip_tagsの2番目の引数が指定されていません

    というのはどういうことでしょうか!?

    トピック投稿者 sensensen

    (@sensensen)

    何となく分かったのですが、

    query_postsの引数に

    <?php
    $args = array(/* 配列に複数の引数を追加 */
         'post_type' => 'post', /* 投稿タイプを指定 */
         'posts_per_page' => 10, /* 表示するページ数 */
         'paged' => $paged, /* WP-PageNaviプラグイン用 */
    	 'cat' => 7,
    ); ?>

    'cat' => 7
    という引数を加えると反応がしないですね、、、

    'cat' => 7
    を加えなければ100文字以上になると…が表示され、
    かつ画像も表示されるのですが、、、

    文字数制限ができていなかったので

    mb_substr(strip_tags($post->post_content),0,200); ?>

    としましたが、文字数制限はされたのですが、
    画像が表示されません、、、、

    // 許可するタグを指定できます
    strip_tags($text, '<p><a>');

    のように説明させていただきました。

    なので画像タグをstrip_tagsで除去しないようにするためには

    // 許可するタグを指定できます
    strip_tags($text, '<img>');

    と書く必要があります。

    テストはしていませんが、以下のようになります。

    $my_content = get_the_content( '続きを読む' );//本文取得
    $my_content = strip_tags( $my_content, '<img>' );//画像以外のタグを除去
    <?php echo mb_substr( $my_content, 0, 300);  ?>

    ただ、ショートコードなどを使っている場合は、別途それらを除去する必要があったと思います。

    mb_substrは、文字列をちょん切るだけなので、ちょん切られた部分に画像要素があるとhtmlが壊れてしまいますから、こういうやり方の場合は、かならず先頭に画像を置くなどの配慮が必要になると思います。

    mb_substr()は、WordPressでも同様の関数がありますので、どちらかというとWordPress関数を使ったほうがいいと思います。

    wp_html_excerpt() とか wp_kses()を調べてみてください

    wp_kses( '文字列’'許可するタグ' );

    許可するタグがarray()だと、strip_tags()の引数を指定場合と同じ結果になります。

    ただ、トップページなどで投稿本文の文字列制限をhtml要素を含んで表示するのは、結構複雑なカスタマイズになってしまうので、投稿本文に<!--more-->で処理可能なようであれば、手間はかかりますが、後々問題は起きにくいんじゃないかなぁ と思うので、そのあたりもよく考えてみてください。

    ‘cat’ => 7
    という引数を加えると反応がしないですね、、、

    ‘cat’ => 7
    を加えなければ100文字以上になると…が表示され、
    かつ画像も表示されるのですが、、、

    文字列操作とは、別の問題ではないかと思います。

    トピック投稿者 sensensen

    (@sensensen)

    お世話になっております。少し教えて頂きたいです

    strip_tags($text, '<img>');

    functions.php
    の「mb_strimwidth_with_elements」内に記述

    し、front-page.phpにはどのように記述すればよいでしょうか?

    http://tenman.info/labo/snip/archives/2790

    を拝見すると、

    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    	<article id="post-<?php the_ID(); ?>" class="content">
        <div>
    		<?php the_content(); ?>
        </div>
        </article>

    でthe_content()を呼び出せば、文字数制限+続きを読む処理
    をfront-page.phpで表示されるようになると思うのですが

    ちなみにpostを回す前に

    <?php
    $args = array(/* 配列に複数の引数を追加 */
         'post_type' => 'post', /* 投稿タイプを指定 */
         'posts_per_page' => 10, /* 表示するページ数 */
         'paged' => $paged, /* WP-PageNaviプラグイン用 */
    	 'cat' => 7,
    ); ?>
    <?php query_posts( $args ); ?>

    query_postsに引数を加えております

    http://tenman.info/labo/snip/archives/2790

    に書いてあるのは、the_content フィルタを使ったものなので、コード全体をfunctions.phpに記述すれば、動作すると思います。

    front-page.phpには何も書く必要がありません。

    本来表示されるはずの、本文を表示する段階で、文字数を数えたりタグを修正しています。

    動かないよ!という意味ですか?
    もし動かないよということでしたら、真っ白になるとか、画面が乱れるとかもう少し情報をください

    strip_tags($text, '<img>');

    ご自身でコードを書く場合に、strip_tagsでimg 要素を除去しない方法という意味です。
    リンク先のコードを修正するためにお知らせしたものではありません

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • トピック「記事の文字数を制限すると記事に表示した画像が消える」には新たに返信することはできません。