Wordpress

Habakiriを使ったカスタマイズ事例~アクションフックの使い方

2016/10/07

前回のインストール編でしたが今回はアクションフック編。

WordPressのフックですが、非プログラマにとっては結構敷居の高いものかもしれません。

なんとなく検索で見つけたコードをコピペして「動いた」からそのまま使っている方も多いと思います。

ですが、Habakiriというテーマはこのフックをフル活用することを前提としているテーマなものですから、これを理解していくしかありません。 ということで解説していきます。

 

 

公式サイトの上記マニュアルを見て「ああ、なるほどね」と思えるレベルの人はこの先を読む必要はありません。 このマニュアルを見てもチンプンカンプンな人に向けて説明します。

例えば、アクションフックの一覧の一つのコレ。

habakiri_prepend_entry_content_front_page_template For Front Page テンプレートのコンテンツエリア(.entry-content)の最初

For Front Pageとは表示設定の際に設定する「フロントページ」のことですね。 habakiri2

このフロントページの「コンテンツエリアの最初」の部分に処理を追加できるぞ、と。

フロントページ(固定ページ)の内容の前にコードを追加して表示項目を追加できるわけです。

例えば「新着情報」の最新5件分をフロントページ(固定ページ)に載せたい場合にこの habakiri_prepend_entry_content_front_page_templateを使い、処理を加えればいいわけです。

 <?php habakiri_prepend_entry_content_front_page_template() { ?>
 <div class="row"> 
  <div class="col-md-12">
    <p class ="info-title">お知らせ</p>
    <ul class="info-area"> <?php query_posts('posts_per_page=5'); ?> 
     <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
      <li> <span class="date"> 
       <?php the_time('Y年n月j日'); ?>
         <?php $days = 30; $today = date('U'); $entry = get_the_time('U');
             $diff1 = date('U', ($today - $entry)) / 86400; if ($days > $diff1) { ?>
               <img src="<?php echo get_template_directory_uri(); ?>/images/new.png" alt="New" > 
               <?php } ?> </span> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 
      </li> <?php endwhile; endif; ?> <?php wp_reset_query(); ?> </ul> 
   </div> 
</div> <?php }  ?>

追記:予想外にこの記事が読まれているようなので追記しますが、上記コードだけではもちろんダメでHabakiriマニュアルの書き方に沿えば、下記のように子テーマのfunction.php上でhabakiri_prepend_entry_content_front_page_templateアックションにフックさせる必要があります。上記コードはあくまで使い方の仕組みを覚える一例です。

<?php 
public function __construct() {
            // Habakiri のコンストラクタを実行
            parent::__construct();

            // pre_get_posts アクションにフック
            add_action('pre_get_posts', array($this, 'pre_get_posts'));

            // the_content フィルターにフック
            add_filter('the_content', array($this, 'the_content'));

            add_action('habakiri_prepend_entry_content_front_page_template', array($this, 'habakiri_prepend_entry_content_front_page_template'));

   
        }
?>

そうすれば、個々のテンプレートファイルに改造を加えることなくfunction.phpに処理を集約できます。

この「コードの集約」はプログラムのメンテナンス、保守性を高めるのに非常に役立ちます。

プログラマ出身の人にはごく普通のことなのですが、デザイン出身の人の書いたコードにはこの「コードの集約」という発想が全くない場合が多々有ります。

一つ何か仕様変更があったら、全部の関係するテンプレートファイルを修正しなければならないWordPressのサイトに何度か遭遇したことがありますが・・・それは仕事の引き継ぎの際などに恨みを買うだけなのでやめましょう。

たぶんDreamweaverで静的サイトを一括変更するのに慣れていたりするとそういうことになりやすいのかもしれませんが・・・。

このようにHabakiriはサイトを作成していく際にテンプレートファイルのよく改造を加える箇所に、アクションフックで処理を追加できる仕組みが備わっていますのでドンドン活用していきましょう。

-Wordpress