ブロックテーマ作成覚え書き

「今どきクラシックテーマなんか使ってるの？時代はブロックテーマだよ」みたいなツイートを目にして、そもそもwordpressのテーマがクラシックとブロックで区別されてるなんて知らんかったのに焦りを覚えた私は、さっそく「ブロックテーマ　作成」で検索して[公式サイトのチュートリアル](https://ja.wordpress.org/team/handbook/block-editor/how-to-guides/themes/create-block-theme/)を見ながら自分のブログのブロックテーマを作ることにした。

# ブログの条件
自分のブログ[149](http://149.fractal.ne.jp/)は単純な作りである。
トップページに最新記事を1件表示し、next_posts_linkで以前の記事へリンクする。
ヘッダーにタイトルとキャッチフレーズ、SNSへのリンクを配置し、フッターにはコピーライトを記載。
以上である。シンプル。
なので必要なテンプレートはindex.html、singular.html、404.htmlの3ファイルがあればいい。

# テーマ作成
最初はチュートリアル通り進めたけど上手くいかず。公式サイトのチュートリアルにある[テーマの例](https://ja.wordpress.org/team/handbook/block-editor/how-to-guides/themes/create-block-theme/#%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AE%E4%BE%8B)から「基本的なスターターテーマ『emptytheme』」をダウンロードし、カスタムしていくことにした。
emptythemeフォルダを/wp-content/themes/にアップロードしてテーマ適用。この辺は今まで通りの手順。
ダッシュボード＞外観＞エディタから編集開始。
ブロックをぽいぽい追加していく。グループを駆使してレイアウトを決めていく。この辺りは色んなブログなどを参考にスイスイいけたので割愛する。
なので以下はつまずいた箇所を書き出していく。

# index.html
![screencapture-hav1002q4v2a-smartrelease-jp-wp-admin-site-editor-php-2023-09-21-16_32_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283089/f4e2c67b-c574-c206-3997-d236d9a99fa3.png)
### ページ送り
クエリループの中、投稿テンプレートの外にブロックを挿入する。この位置関係がわかるまで検索しまくった。
### 設定＞テンプレートからクエリーを継承
index.htmlではこれをオンにする。
オンにしないとページ送りのリンク先でタイトルがどのページでも同一になってしまった。

# singular.html
![screencapture-hav1002q4v2a-smartrelease-jp-wp-admin-site-editor-php-2023-09-21-16_33_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283089/d9df28d7-1e60-9228-356f-9e616638d9dc.png)
### 本文部分にクエリループは使用しない
投稿タイトルブロックと投稿コンテンツブロックを直接配置すればOK。
クエリループを使ったら前の投稿リンク、次の投稿リンク先で本文がどのページでも同一になった。

# functions.php
emptythemeテーマのfunctions.phpですでにstyle.cssの読み込みは記述されているので、
[「WordPressテックラボ　functions.phpでJSやCSSを一元管理する」](https://rfs.jp/sb/wordpress/wp-lab/wp_enqueue_script.html)を参考にしてJSファイルも読み込む。
さらにhead内にGA4とOGPを設置するため[「とくしよネット　WordPressでOGP,Twitterカードの設定（プラグイン無し）」](https://tokushiyo.net/wordpress/post-1480/)を参考にfunctions.phpへ以下を記述。
```functions.php
// head内に挿入したいタグ処理
function add_ga4() {
echo '<!-- Global site tag (gtag.js) - Google Analytics -->' . "\n";
echo '<script async src="https://www.googletagmanager.com/gtag/js?id=G-xxxxxxx"></script>' . "\n";
echo '<script>' . "\n";
echo '  window.dataLayer = window.dataLayer || [];' . "\n";
echo '  function gtag(){dataLayer.push(arguments);}' . "\n";
echo '  gtag("js", new Date());' . "\n";
echo '  gtag("config", "G-xxxxxxxx");' . "\n";
echo '</script>' . "\n";
}
add_action('wp_head', 'add_ga4');

function my_ogp() {
  if( is_front_page() || is_home() || is_singular() ){
    global $post;
    $og_site_name = get_bloginfo('name');
    $og_title = '';
    $og_description = '';
    $og_url = '';
    $og_image = get_template_directory_uri() . '/img/ogp.png';
    $html = '';
    //記事＆固定ページ
    if( is_singular() ) {
      setup_postdata($post);
      $og_title = $post->post_title;
      $og_description = mb_substr(get_the_excerpt(), 0, 100);
      $og_url = get_permalink();
      $og_type ='article';
	   }
//トップページ
	if ( is_front_page() || is_home() ) {
       $og_title = get_bloginfo('name');
       $og_description = get_bloginfo('description');
       $og_url = home_url();
       $og_image = get_template_directory_uri() . '/img/ogp.png';
       $og_type ='website';
    }
    //OGPタグの出力
    $html .= '<meta property="og:title" content="'.esc_attr($og_title).'" />' . "\n";
    $html .= '<meta property="og:description" content="'.esc_attr($og_description).'" />' . "\n";
    $html .= '<meta property="og:type" content="'.$og_type.'" />' . "\n";
    $html .= '<meta property="og:url" content="'.esc_url($og_url).'" />' . "\n";
    $html .= '<meta property="og:image" content="'.esc_url($og_image).'" />' . "\n";
    $html .= '<meta property="og:site_name" content="'.esc_attr($og_site_name).'" />' . "\n";
    $html .= '<meta property="og:locale" content="ja_JP" />' . "\n";
    $html .= '<meta name="twitter:card" content="summary_large_image" />' . "\n";
    echo $html;
  }
}
add_action('wp_head','my_ogp');
```
また、ファビコンを設定するためカスタマイザーをメニューに表示させるコードも記述。
```functions.php
add_action( 'customize_register', '__return_true' );
```

# 書き出し
![screencapture-hav1002q4v2a-smartrelease-jp-wp-admin-site-editor-php-2023-09-21-16_34_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283089/b3d91096-01c4-8f1d-d064-f873720e2d19.png)
一通りエディタでの設定が終わったらビジュアルエディタからコードエディタに切り替え、index.html、singular.html、404.htmlとpartsフォルダのheader.html、footer.htmlをそれぞれファイルにコピペする。
* * *
以上です。