サポート » 使い方全般 » 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
    ではフィルタが適用されない現象が発生しています。

    どちらにも反映しないのであれば、自作プラグインの問題として考えられるのですが、
    部分的に反映したりしなかったりという問題なので、困惑しています。

    フィルタが、自作のものなので、きっちり再現できる条件など出せなくて申し訳ありませんが、類似の現象を経験している方や、対策を取られた方のアドバイスをお待ちしています。

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

    (@lilyfan)

    フィルタが、自作のものなので、きっちり再現できる条件など出せなくて申し訳ありませんが、類似の現象を経験している方や、対策を取られた方のアドバイスをお待ちしています。

    どのフィルターフックを使っているのか不明なことと、どういうフィルター処理をするのかも謎なので、何とも言えませんね〜〜。いっそのこと、プラグインのソースコードを出してみてください。少なくとも、使っているフックが不明だとアドバイス不可能です。

    トピック投稿者 nobita

    (@nobita)

    プラグインのソースコードを出してみてください。

    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;
    
        }
    ?>
    モデレーター IKEDA Yuriko

    (@lilyfan)

    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; が必要です。

    トピック投稿者 nobita

    (@nobita)

    remove_filter したのに、また add_filter しているのはなぜでしょう??

    正しい書き方教えていただいてありがとうございます。参考になりました。

    、、、ところで
    /*
    *
    */

    global $allowedposttags;
    unset($allowedposttags['p']);
    add_filter('the_content','ugoitekureyon',9);
    function ugoitekureyon($text){
    ……………………
    }

    グローバル宣言の位置そこでいいのか良く分かっていないのですが、
    とりあえずやってみました、挙動に変化がありませんでした。

    間違っていたら、恐縮ですが、ご指導いただけるとうれしいです。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    フィルターの中身が 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 にもフィルターを適用させるとよいはずです。

    トピック投稿者 nobita

    (@nobita)

    丁寧な助言ありがとうございます。
    ご指摘のありました点を調べてみました。

    確かに、テーマファイルは異なっており、新しくテーマを入れ替えて、調べてみました。
    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 &raquo;'); ?>
    <!-- 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 &raquo;'); ?>
    <!-- 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>
    トピック投稿者 nobita

    (@nobita)

    自己レスですが、

    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

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「wordpress2.5 から 2.51でプラグインの挙動が変わってしまいました。」には新たに返信することはできません。