情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

WordPressPopularPostsの余計なCSSの追加を無効化する方法

PHP (25) WordPress (76) WordPressPopularPosts (1) WordPressプラグイン (25)

WordPressプラグインが余計なことをするときは、remove_actionやremove_filterを使えば特定の機能(フックに登録された関数一つ)を削除することで対応できます。しかし、プラグインの書かれ方によっては、それだけではうまく行かないことがあります。それについてメモします。

基礎知識

WordPressプラグインを改造するときは、直接プラグインのコードを編集するのではなく、function.phpにコードを追加するのが鉄則です。なぜなら、プラグインをアップデートすると、編集したプラグインのコードがアップデートに巻き込まれてしまうからです。なので、プラグインアップデートに巻き込まれないfunction.phpで実現できることは、そちらで行った方が無難ですし、変更点が明確で見通しもよかったりします。

add_action、add_filterを無効化する普通の方法

余計な機能を実装している部分を見つけたら、その関数がどこで呼ばれているかを確認します。プラグインのソースコードの中を、関数名で検索してみてください。どこかに、登録している行があると思います。

たとえば、「add_action('widgets_init', 'function_name');」や「add_filter('the_content', 'wptexturize');」などです。これらをコメントアウトをするのは簡単ですが、先ほど紹介した理由から、次のようにfunction.phpに記述して無効化してあげるのが正解です。

remove_action('widgets_init', 'function_name');
remove_filter('the_content', 'wptexturize');

「add」を「remove」にするだけです。簡単。

WordpressPopularPostsではうまく行かない

しかし、WordpressPopularPostsがheadに

<link rel="stylesheet" href="http://did2memo.net/wp-content/plugins/wordpress-popular-posts/style/wpp.css" type="text/css" media="screen" />

を追加するコードは、今紹介した方法では無効化できません。

Wordpress Popular Postsのadd_actions

Wordpress Popular Postsは、先ほどのコードを「wpp_print_stylesheet」という関数で追加しており、この関数は、次のコードでWordPress本体に織り込まれています。

add_action('wp_head', array(&$this, 'wpp_print_stylesheet'));

少し書き方が複雑ですね。この複雑な分、「remove_action('wp_head', 'wpp_print_stylesheet');」のように書いても効果はありませんし、「remove_action('wp_head', array(&$this, 'wpp_print_stylesheet'));」と書いてもダメです。

対策法

この場合は、次のように記述すれば、add_actionで追加されたwpp_print_stylesheetを無効化できます。

add_action('wp_head', 'remove_widget_action', 1);

function remove_widget_action() {
global $wp_widget_factory;

remove_action( 'wp_head', array($wp_widget_factory->widgets['WordpressPopularPosts'], 'wpp_print_stylesheet') );
}

かなり行数が増えます。「WordpressPopularPosts」は、プラグインの名前です。このように、add_actionで追加した関数remove_widget_actionの中でremove_actionをするという、間接的な方法によって、先ほどのadd_actionsを無効化することができます。

ひとこと

ちょっと難しかったので、メモしておきました。

参考

コメント(0)

新しいコメントを投稿