フィルタが、自作のものなので、きっちり再現できる条件など出せなくて申し訳ありませんが、類似の現象を経験している方や、対策を取られた方のアドバイスをお待ちしています。
どのフィルターフックを使っているのか不明なことと、どういうフィルター処理をするのかも謎なので、何とも言えませんね〜〜。いっそのこと、プラグインのソースコードを出してみてください。少なくとも、使っているフックが不明だとアドバイス不可能です。
プラグインのソースコードを出してみてください。
2.5で、動作。2.51で動作に問題が出ることが、再現できるプラグインを作りましたので、よろしくお願いします。
<?php
/*
Plugin Name: plugin-wordpress
Plugin URI: -----
Description:テキスト置換プラグイン
Version: 0
Author:nobita
Author URI: -----
*/
unset($allowedposttags['p']);
remove_filter ('the_content', 'wpautop');
remove_filter ('the_content', 'wptexturize');
add_filter('the_content','apply');
add_filter ('the_content', 'wpautop');
add_filter ('the_content', 'wptexturize');
function apply($text){
$a = "apple";
$b = "りんご";
$text = str_replace($b,$a,$text);
return $text;
}
?>
remove_filter ('the_content', 'wpautop');
remove_filter ('the_content', 'wptexturize');
add_filter('the_content','apply');
add_filter ('the_content', 'wpautop');
add_filter ('the_content', 'wptexturize');
remove_filter したのに、また add_filter しているのはなぜでしょう??
apply を wpautop などよりも先に実行させたいならば、優先順位を設定して
add_filter('the_content','apply',9);
などとすれば OK です。後にしたいなら 9 じゃなくて 11 とか 20 にしてください。
優先順位を指定しない場合は「10」になりますが、同じ優先順位のフィルターがどの順序で実行されるかは不定です (フィルターを追加した順になるとは限らない)。
それと、”apply” という名前はサンプル用に適当に作ったものかもしれませんが、WordPress コアで使っている名前と衝突するとエラーになりますので、それも確認しておいてください。
あと、プラグインの名前空間はグローバルじゃないので、unset($allowedposttags['p']);
をするなら global $allowedposttags;
が必要です。
remove_filter したのに、また add_filter しているのはなぜでしょう??
正しい書き方教えていただいてありがとうございます。参考になりました。
、、、ところで
/*
*
*/
global $allowedposttags;
unset($allowedposttags['p']);
add_filter('the_content','ugoitekureyon',9);
function ugoitekureyon($text){
……………………
}
グローバル宣言の位置そこでいいのか良く分かっていないのですが、
とりあえずやってみました、挙動に変化がありませんでした。
間違っていたら、恐縮ですが、ご指導いただけるとうれしいです。
フィルターの中身が str_replace()
とすると、関数の書き方に問題はなさそうですね。
http://www.….jp/blog/?cat=1
http://www.….jp/blog/?m=200805
これらのクエリーでは、the_content ではなく the_excerpt が呼ばれているのではないでしょうか。お使いのテーマを確認してみてください。WordPress 2.5 と 2.5.1 の違いではなく、テーマが変わってしまったのではないでしょうか。
この場合、the_excerpt にもフィルターを適用させるとよいはずです。
丁寧な助言ありがとうございます。
ご指摘のありました点を調べてみました。
確かに、テーマファイルは異なっており、新しくテーマを入れ替えて、調べてみました。
http://www.h4x3d.com/themes/feather/
トップページが呼ばれた時には、index.php ?p=3とかの場合は、single.phpが呼ばれているようなので、当該部分を比較しました。(以下のソースの通りです。)
the_content のようですが、ページによって、the_contentにwordpress自身がフィルタを動的にかけているようなことがあるのかどうか、ご存知でしょうか?(例えば、index.phpで表示する時には、strip_tagsするようなことがあるかどうかということなのですが)
single.php
<tr>
<td class="date">
<span class="date_day"><!-- day --><?php the_time('j'); ?></span>
<span class="date_month"><!-- month --><?php the_time('m'); ?></span>
<span class="date_year"><!-- year --><?php the_time('Y'); ?></span>
<?php edit_post_link('Edit',''); ?>
<span class="date_comment"><?php comments_popup_link('0', '1', '%'); ?></span>
</td>
<td valign="top"><div class="entry">
<?php the_content('Continue reading »'); ?>
<!-- sinnlos
<?php trackback_rdf(); ?>
-->
<img width="432" src="<?php bloginfo('stylesheet_directory'); ?>/images/title2.png"
alt="categories" />
<span class="cats">Filled under: <?php the_category(', ') ?></span>
<br class="both" />
<?php comments_template(); // Get wp-comments.php template ?>
</div> <!-- end entry --></td>
</tr>
index.php
<tr>
<td class="date">
<span class="date_day"><!-- day --><?php the_time('j'); ?></span>
<span class="date_month"><!-- month --><?php the_time('m'); ?></span>
<span class="date_year"><!-- year --><?php the_time('Y'); ?></span>
<?php edit_post_link('Edit',''); ?>
<span class="date_comment"><?php comments_popup_link('0', '1', '%'); ?></span>
</td>
<td valign="top"><div class="entry">
<?php the_content('Continue reading »'); ?>
<!-- sinnlos
<?php trackback_rdf(); ?>
-->
<img width="432" src="<?php bloginfo('stylesheet_directory'); ?>/images/title2.png"
alt="categories" />
<span class="cats">Filled under: <?php the_category(', ') ?></span>
<br class="both" />
</div> <!-- end entry --></td>
</tr>
自己レスですが、
formatting.php
2.5.1になって、以下のコードが追加されていました。
line95 $pee = preg_replace('/<p>\s*?(' . get_shortcode_regex() . ')\s*<\/p>/s', '$1', $pee);
デフォルトテーマやWordPress Classic 1.5では、上記のコードをコメントアウトすることで、フィルタをトップページでも書けることが出来るようになりました。
shortcode_regex()の機能などは、今後の自分の課題にしたいと思います。
レスポンスいただいたlilyfanさん、ありがとうございました。
また、質問させていただくことが、多々あると思います。
今後ともよろしくお願いします。
nobita