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()
を組み合わせるとできるのではないかと思います。
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の二番目の引数が指定されていません
strip_tagsの2番目の引数が指定されていません
というのはどういうことでしょうか!?
何となく分かったのですが、
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文字以上になると…が表示され、
かつ画像も表示されるのですが、、、
文字列操作とは、別の問題ではないかと思います。
お世話になっております。少し教えて頂きたいです
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 要素を除去しない方法という意味です。
リンク先のコードを修正するためにお知らせしたものではありません