wordpressの細かい修正を割りとラフにハードコーディングしてきたんだけど、さすがに量も増えてきたし、バージョンアップも多いし、毎回直すのが億劫になってきた。という訳で、いい加減バージョンアップに影響を受けない修正方法を検討する。何となく想像は付いていて、専用のプラグインを作り、コアモジュール以外の部分で修正を行えるように準備する。そのプラグインの中でwidget作ったり、パラメータを上書きしたり、実現したいカスタマイズを実装していく。
wp-content/pluginsの下に自分用プラグインとしてディレクトリを作り、そこに数々の変更を集約する。中心となるphpは他のphpを読み込むだけのphpとした。まずはプラグインの集約から。コマンドリファレンス用に作ったページも当初は他のプラグインのテンプレートを改造して実現していたが、既にazindexという名のプラグインとして実装し直していた。中身はSQL投げてhtmlを書いたものをadd_shortcode()するだけ。このプラグインもモジュールの1つとして移動させる。
function custom_azindex ( $atts ) {
extract(shortcode_atts(array(
'title' => '',
), $atts));
$parent_post = get_page_by_title($title);
$args = array(
'post_status' => 'publish',
'post_type' => 'page',
'parent' => $parent_post->ID,
'orderby' => 'post_title',
'order' => 'ASC',
'nopaging' => true,
);
$posts = get_pages( $args );
$html =<<<EOF
:
EOF;
return $html;
}
add_shortcode ( 'azindex', 'custom_azindex' );
次に各widgetのパラメータ変更を行うモジュールを作成。例えばlinksウィジェットのhide_invisibleを0に変更するものや、recent-postsウィジェットの条件にカテゴリIDやタグIDを追加するものである。どれもadd_filter()で簡単に実現できる。tag cloudウィジェットの条件にもカテゴリIDとタグIDを追加するようにしたのだが、こちらは簡単にはいかずにがっつりSQLを実行するような作りになってしまった。また、archivesウィジェットにスクロールバー付けるだけの変更もよい方法が見つからず、まるっとwidgetを書き直すような修正になっている。
function custom_widget_links_args($widget_links_args) {
$widget_links_args = array_replace($widget_links_args, array('hide_invisible' => 0));
return $widget_links_args;
}
add_filter('widget_links_args', 'custom_widget_links_args');
あとは、robots.txtを修正するモジュールも追加した。これもadd_filter()にて簡単に。最後にadmin_bar_menuの改善。複数ホストで運用している関係で、自分がどのサーバにアクセスしているか知りたいので、admin_bar_menuにホスト名を追加するようにしている。ついでにホスト名をクリックするとトップページへ飛ぶように。これはadd_action()で実現している。
function custom_admin_bar( $wp_admin_bar ) {
:
$hostname = explode(".", gethostname())[0];
$wp_admin_bar->add_menu( array(
'id' => 'custom',
'title' => $hostname,
'href' => home_url( '/' ),
) );
}
add_action('admin_bar_menu', 'custom_admin_bar', 31);
他にも同じような形で他のプラグインをadd_filter()したりして、自分好みに修正している。この方法であれば本体やプラグインのバージョンアップがあっても、いちいち修正せずにカスタマイズした状態を維持できる。ただ簡単な修正にも関わらず、add_filter()で対応できないようなものなどは、どうしてよいのかまだわかっていない。とりあえずpatchで対応してしまっているが、更に効率的な修正方法を見つけていきたい。