wordpress2.5 から 2.51でプラグインの挙動が変わってしまいました。
-
はじめまして、よろしくお願いします。
ver2.5で
自作のフィルタプラグインを使っているのですが、何も問題なく表示できていました。ver2.51で
編集画面のプレビューではフィルタが反映されるのですが、、、
http://www.….jp/blog/?p=3ではフィルタが適用されて、
http://www.….jp/blog/?page_id=6も大丈夫です。
しかし、
http://www.….jp/blog/?cat=1
http://www.….jp/blog/?m=200805
ではフィルタが適用されない現象が発生しています。どちらにも反映しないのであれば、自作プラグインの問題として考えられるのですが、
部分的に反映したりしなかったりという問題なので、困惑しています。フィルタが、自作のものなので、きっちり再現できる条件など出せなくて申し訳ありませんが、類似の現象を経験している方や、対策を取られた方のアドバイスをお待ちしています。
-
フィルタが、自作のものなので、きっちり再現できる条件など出せなくて申し訳ありませんが、類似の現象を経験している方や、対策を取られた方のアドバイスをお待ちしています。
どのフィルターフックを使っているのか不明なことと、どういうフィルター処理をするのかも謎なので、何とも言えませんね〜〜。いっそのこと、プラグインのソースコードを出してみてください。少なくとも、使っているフックが不明だとアドバイス不可能です。
プラグインのソースコードを出してみてください。
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()とすると、関数の書き方に問題はなさそうですね。これらのクエリーでは、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
トピック「wordpress2.5 から 2.51でプラグインの挙動が変わってしまいました。」には新たに返信することはできません。