フォーラム » 【重要】 お読みください » 問題解決のためのチェックリスト
上記トピックは確認しましたか?
WP標準でもWP Multibyte Patchでもスペースを文字参照に変更していないようです。
文字参照に変更しているプラグインまたはテーマの記述を特定してはどうでしょう?
プラグインが原因だった場合は代替となるプラグインを探すか、プラグインの作者さんに報告すれば良いです。
トピック投稿者
tk5
(@tk5)
popup さま、
ご指摘ありがとうございます。
プラグインは以下のものを使っています。
Akismet
Contact Form 7
Really Simple CAPTCHA
Multi Device Switcher
WP Multibyte Patch
私の書き方が悪かったと思います。ユーザーさんがブログを書くときにビジュアルモードで改行する際に「Enterキー」を押すと「 」が挿入されてしまい、それが文字数としてカウントされていて、ちょうどその部分が最後(excerpt_mblength で設定した文字数)の場合にその一部が表示されてしまうのではと思っているのですが、何かいい方法はないかと思っています。
トピック投稿者
tk5
(@tk5)
すみません。
  をそのまま書いてしまいました。
ユーザーさんがブログを書くときにビジュアルモードで改行する際に「Enterキー」を押すと「 」が挿入されてしまい、それが文字数としてカウントされていて、ちょうどその部分が最後(excerpt_mblength で設定した文字数)の場合にその一部が表示されてしまうのではと思っているのですが、何かいい方法はないかと思っています。
こんにちは
ご指摘の件
$post = get_post(25589);
setup_postdata($post);
echo get_the_excerpt();
で文末の不要な改行が、nbsp;に置換されるのが確認できました。
文中のnbsp;も削除すると、p要素の表示に何らかの変化を与えるかもしれないです。
add_filter('get_the_excerpt', 'my_excerpt');
function my_excerpt( $content){
return trim( $content ,"ここは以下参照");
}
「ここは以下参照」は、書けないので
半角スペース+ です
で は、除去できると思います
書き方を変えて
$p = get_post(25589);
echo wp_html_excerpt($p->post_content,100,'...');
等でもいいと思います。
トピック投稿者
tk5
(@tk5)
nobita さま、
ご回答いただきありがとうございます。
ご教示いただいた方法が理解できていないのですが、以下のように試してみました。
1番目の方法
functions.php
add_filter('get_the_excerpt', 'my_excerpt');
function my_excerpt( $content){
return trim( $content ,"  ");
}
index.php には以下2つを試しました。
<?php echo '<p>' .get_the_excerpt() . '<span class="more"><a href="'.get_permalink(). '"> ( ' .__('more', 'xxxx').' ) </a></span></p>';
$my_excerpt = apply_filters('the_excerpt', get_the_excerpt());
<?php echo '<p>' .$my_excerpt . '<span class="more"><a href="'.get_permalink(). '"> ( ' .__('more', 'xxxx').' ) </a></span></p>';
どちらでも、抜粋に表示される「&nbs」や「&nb」はそのままでした。
2番目の方法
index.php に以下を記述してみました。
$p = get_post(get_the_ID());
echo '<p>' .wp_html_excerpt($p->post_content,160,'...') . '<span class="more"><a href="'.get_permalink(). '"> ( ' .__('more', xxxx').' ) </a></span></p>';
この場合、抜粋の「&nbs」や「&nb」は表示されなくなりましたが、今度はキャプションのショートコードが表示されてしまいました。
試しに以下のようにしても同じでキャプションのショートコードが表示されてしまいました。
$p = get_post(get_the_ID());
$my_excerpt = apply_filters('the_excerpt', wp_html_excerpt($p->post_content,160,'...'));
echo '<p>' .$my_excerpt . '<span class="more"><a href="'.get_permalink(). '"> ( ' .__('more', 'xxxx').' ) </a></span></p>';
おそらく正しく理解できていないのだと思います。。。
ショートコード込だと
$p = get_post(25589);
$content = strip_shortcodes( $p->post_content );
echo wp_html_excerpt($content,100,'...');
でいけると思います
ビジュアルモードで余分な改行を行うと空の段落'<p> ;</p>’が作成されるんですね。
WP Multibyte Patchが無効でも同様の動作だったので、コアを修正してもらう必要があるんじゃないかと思います。
修正されるまでは現状のまま利用して、余分な改行を行わないようにしてはどうでしょう?
[問題点]
‘the_excerpt’、’get_the_excerpt’で’ ;’が残っていると、指定文字数によっては’&;n’や’&n’のように一部だけ表示される
[修正案]
‘wp-includes/formatting.php’にある’wp_trim_words()’関数で、指定文字数によるトリムを行う前、’wp_strip_all_tags()’を実行する直前もしくは直後に’ ;’を削除しておけば良いんじゃないかと思います。
問題報告前の動作確認とプロジェクトへの報告はどなたか英語が分かる人にお願いしたいのですが。
トピック投稿者
tk5
(@tk5)
nobita さま、
いけました!
ご教示いただいた方法で、問題が解決できました。
本当にありがとうございました。
wp_html_excerpt(), strip_shortcodes() 勉強になりました。
$p = get_post(get_the_ID());
$content = strip_shortcodes( $p->post_content );
echo '<p>' .wp_html_excerpt($content,160,__('...', 'xxxx'))
. '<span class="more"><a href="'.get_permalink()
. '"> ( ' .__('more', 'xxxx')
.' ) </a></span></p>';
popup さま
ご助言ありがとうございました。
私はまだあまり理解できていないので「問題報告」はできませんが、感謝です。