wordpress 修正のプラグイン化

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で対応してしまっているが、更に効率的な修正方法を見つけていきたい。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)