WordPress:テーマ制作は一からの制作に行きつく

Genesis Framework を使う方法とブランクテーマ Blankslate を使う方法と二刀流でいろいろやってきたのですが、結局、ブランクテーマからつくることができるのであれば、すべて一から作ればいいということに行きつきました。



やっとわかった WordPress

わかったと言ってもテーマをつくる上のほんの走りですが、WordPress はもとがブログシステムですので、いくら企業サイトに使われると言っても、基本は日々の記事をデータベースに保存し、それを時系列で表示したり、カテゴリー別に表示したりする CMS です。

ですので、基本となるのは投稿ページであり、それを表示するには「ループ」というものを理解すればすべてに応用がききます。それ以外は単独で表示する固定ページですのでそれらは深く考えずに自由に HTML を書けば出来上がります。


ループ

<?php
get_header();

if ( have_posts() ) :
  while ( have_posts() ) :
    the_post();
    
    // 実際にはこんな単純ではないが、たとえばこんな感じで記事を出力する
    // echo '<h1>' . the_title() . '</h1>';
    // echo '<div>' . the_content() . '</div>';
    
  endwhile;
endif;

get_sidebar();
get_footer();


このループを index.php に書いておけば、ダッシュボードの 設定 > 表示設定 > ホームページの表示が「最新の投稿」になっていれば「1ページに表示する最大投稿数」に設定した数の投稿記事がホームページに表示されます。

ああ、当たり前ですが、header.php, sidebar.php, footer.php がないとダメです。ループの説明のための便宜的なものです。


このページのほうがわかりやすいですね。いずれにしても、これだけでホームと個別投稿ページは出来上がりますし、カテゴリーページもほぼ同様です。


サブループ

サイドバーにはウィジェットで様々なコンテンツを登録すればいいわけですが、仮に自前で最新の投稿を表示したい場合はサブループを使えば可能になります。

<?php
$args = array(
  'posts_per_page' => 10,   //取得する投稿数
  // パラメータを書いていく
  );

$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
  while ( $the_query->have_posts() ) : 
    $the_query->the_post();

    // コンテンツ表示
    
  endwhile;
endif;
wp_reset_postdata();

パラメータはこちらのページにあります。


SEO / JSON-LD

SEO は大丈夫かと心配にもなりますが、そうした解説サイトは腐るほどありますのでそれらを参考にしつつ基本を抑えて、JSON-LD による構造化マークアップをすれば問題ないのではないかと思います。

ということで一から出直しです(笑)。