GeneratePressサイトの構造とカスタマイズポイント総整理

GeneratePressをカスタマイズする際に知っておくと便利な構造やCSS要素、フックポイントを整理しました。これらを理解すれば、「どこを変更すると何が変わるのか」が明確になり、効率的なカスタマイズが可能になります。

サイト全体の構造とCSS階層

GeneratePressのHTMLは論理的に構成されており、主要な要素には一貫したクラス名が付けられています。

基本構造

body
  └── .site-container
      ├── .site-header
      │    ├── .inside-header
      │    │    ├── .site-logo
      │    │    └── .main-navigation
      │    └── .main-navigation
      ├── .site-content
      │    ├── .content-area
      │    │    └── .inside-article
      │    └── .widget-area (.sidebar)
      └── .site-footer
           └── .inside-footerCode language: CSS (css)

主要CSS要素一覧

1. ヘッダー関連

要素CSSセレクタ説明
ヘッダーコンテナ.site-headerサイトのヘッダー全体
ヘッダー内部.inside-headerヘッダーの内側コンテンツ領域
サイトタイトル.site-titleサイトのタイトルテキスト
サイトロゴ.site-logoロゴ画像用コンテナ
メインメニュー.main-navigationトップナビゲーションメニュー
メニュー項目.menu-item, .menu-item-has-childrenメニュー内の各リンク項目
/* ヘッダーの背景色と文字色を変更 */
.site-header {
  background-color: #333;
  color: #fff;
}

/* メニュー項目のホバー効果 */
.main-navigation .menu-item a:hover {
  background-color: #555;
  color: #fff;
}Code language: CSS (css)

2. コンテンツエリア関連

要素CSSセレクタ説明
コンテンツエリア.content-areaメインコンテンツのエリア
記事コンテナ.inside-article記事内容を囲むコンテナ
記事タイトル.entry-title記事タイトル
記事メタ情報.entry-meta投稿日時や著者情報
記事本文.entry-content記事の本文部分
フィーチャー画像.featured-imageアイキャッチ画像
/* 記事タイトルのスタイル変更 */
.entry-title {
  font-size: 28px;
  color: #333;
  border-bottom: 2px solid #ddd;
  padding-bottom: 10px;
}

/* 記事コンテナに影をつける */
.inside-article {
  box-shadow: 0 0 10px rgba(0,0,0,0.1);
  padding: 25px;
  border-radius: 5px;
}Code language: CSS (css)

3. サイドバー関連

要素CSSセレクタ説明
サイドバーエリア.widget-area, .sidebarサイドバー全体
ウィジェットコンテナ.widget個々のウィジェット
ウィジェットタイトル.widget-titleウィジェットのタイトル
/* サイドバーウィジェットの装飾 */
.sidebar .widget {
  background: #f9f9f9;
  padding: 20px;
  margin-bottom: 20px;
  border-radius: 5px;
}

/* ウィジェットタイトルの装飾 */
.widget-title {
  border-bottom: 2px solid #e0e0e0;
  padding-bottom: 10px;
  margin-bottom: 15px;
  font-size: 18px;
}Code language: CSS (css)

4. フッター関連

要素CSSセレクタ説明
フッターコンテナ.site-footerサイトのフッター全体
フッター内部.inside-footerフッターの内側コンテンツ領域
フッターウィジェット.footer-widgets-containerフッターウィジェットエリア
コピーライト.copyright-bar著作権表示エリア
/* フッターの背景色と文字色を変更 */
.site-footer {
  background-color: #333;
  color: #fff;
}

/* コピーライトのスタイル */
.copyright-bar {
  text-align: center;
  padding: 15px 0;
  font-size: 14px;
}Code language: CSS (css)

5. 投稿リスト関連

要素CSSセレクタ説明
アーカイブタイトル.archive-titleカテゴリページなどのタイトル
投稿リスト.post-list投稿一覧ページ
ページナビゲーション.paging-navigationページ送りナビゲーション
/* 投稿一覧をグリッドレイアウトに */
.post-list .site-main {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 20px;
}

/* ページナビゲーションを中央揃え */
.paging-navigation {
  text-align: center;
  margin: 30px 0;
}Code language: CSS (css)

重要なフックポイント

GeneratePressでは、フックを使ってテーマの様々な部分に独自のコードやコンテンツを挿入できます。以下は特に有用なフックポイントです。

アクションフック

フック名説明使用例
generate_before_headerヘッダーの前に実行通知バーの追加
generate_after_headerヘッダーの後に実行ヒーローセクションの追加
generate_before_contentコンテンツの前に実行パンくずリストの追加
generate_after_contentコンテンツの後に実行関連記事の表示
generate_before_footerフッターの前に実行CTAセクションの追加
generate_after_footerフッターの後に実行追跡コードの挿入
generate_after_entry_header記事タイトルの後に実行目次の追加
generate_before_entry_content記事本文の前に実行広告の挿入
generate_after_entry_content記事本文の後に実行シェアボタンの追加
// ヘッダー下にお知らせバーを追加する例
function add_notification_bar() {
    echo '<div class="notification-bar">期間限定セール実施中!詳細はこちら</div>';
}
add_action('generate_after_header', 'add_notification_bar');

// 記事の下に関連記事を表示する例
function add_related_posts() {
    if (is_single()) {
        // 関連記事を取得するロジック
        echo '<div class="related-posts">関連記事があります</div>';
    }
}
add_action('generate_after_entry_content', 'add_related_posts');Code language: PHP (php)

フィルターフック

フック名説明使用例
generate_copyrightコピーライトテキストを変更著作権表示のカスタマイズ
generate_nav_searchナビゲーション検索を変更検索アイコンのカスタマイズ
generate_sidebar_layoutサイドバーレイアウトを変更特定ページでサイドバーを非表示
generate_blog_columnsブログカラム数を変更グリッドレイアウトの列数変更
generate_post_author投稿著者表示を変更著者情報のカスタマイズ
generate_entry_meta_post_date投稿日時表示を変更日付表示のフォーマット変更
// コピーライト表示を変更する例
function custom_copyright($copyright) {
    return 'Copyright © ' . date('Y') . ' <a href="' . home_url() . '">' . get_bloginfo('name') . '</a>. All rights reserved.';
}
add_filter('generate_copyright', 'custom_copyright');

// 特定の投稿でサイドバーを非表示にする例
function remove_sidebar_on_specific_posts($layout) {
    if (is_single(array(123, 456, 789))) {  // 特定の投稿ID
        return 'no-sidebar';
    }
    return $layout;
}
add_filter('generate_sidebar_layout', 'remove_sidebar_on_specific_posts');Code language: PHP (php)

ページごとの状態を判別するクラス・関数

GeneratePressは、現在表示しているページの種類に応じてbodyタグに特定のクラスを追加します。これらを利用してページタイプ別のスタイル設定が可能です。

主な判別クラス

状態bodyクラスPHP条件関数
トップページ.homeis_home()
個別投稿ページ.singleis_single()
固定ページ.pageis_page()
アーカイブページ.archiveis_archive()
カテゴリーページ.categoryis_category()
検索結果ページ.searchis_search()
404エラーページ.error404is_404()

これらを利用したCSSの例:

/* トップページのみヘッダーを大きく表示 */
.home .site-header {
  padding: 30px 0;
}

/* 投稿ページのみサイドバーの幅を広く */
.single .widget-area {
  width: 30%;
}

/* 404エラーページのスタイル */
.error404 .inside-article {
  text-align: center;
  padding: 50px 20px;
}Code language: CSS (css)

主要テンプレートファイルとそのカスタマイズ

子テーマで独自テンプレートを作成することで、特定のページタイプのデザインをカスタマイズできます。

テンプレートファイル説明カスタマイズポイント
header.phpサイトヘッダーナビゲーション、ロゴ配置
footer.phpサイトフッターコピーライト、フッターウィジェット
index.phpメインテンプレート全体的なサイト構造
single.php個別投稿ページ記事レイアウト、投稿メタ情報
page.php固定ページページのレイアウト
archive.phpアーカイブページカテゴリー/タグページのレイアウト
search.php検索結果ページ検索結果の表示形式
404.php404エラーページカスタム404メッセージ

カスタムテンプレート作成例:

<?php
/**
 * Template Name: 全幅テンプレート
 */

get_header(); 
?>

<div id="primary" class="content-area full-width">
    <main id="main" class="site-main">
        <?php
        while ( have_posts() ) :
            the_post();

            get_template_part( 'content', 'page' );

            // コメントが有効なら表示
            if ( comments_open() || get_comments_number() ) :
                comments_template();
            endif;

        endwhile;
        ?>
    </main>
</div>

<?php
get_footer();Code language: HTML, XML (xml)

GenerateBlocksのCSS構造

GenerateBlocksを使う場合の主要クラス:

ブロック主要クラスカスタマイズポイント
コンテナ.gb-container背景、パディング、マージン
グリッド.gb-grid-wrapper, .gb-grid-columnカラム幅、ギャップ
見出し.gb-headlineフォント、色、サイズ
ボタン.gb-button色、サイズ、ホバー効果
/* ボタンホバー時のアニメーション */
.gb-button {
  transition: all 0.3s ease;
}
.gb-button:hover {
  transform: translateY(-3px);
  box-shadow: 0 5px 10px rgba(0,0,0,0.2);
}

/* グリッド列のレスポンシブ調整 */
@media (max-width: 768px) {
  .gb-grid-column {
    flex-basis: 100% !important;
  }
}Code language: CSS (css)

レスポンシブデザインのブレイクポイント

GeneratePressが使用する主要なメディアクエリのブレイクポイント:

デバイスサイズブレイクポイント説明
モバイル768px以下スマートフォン向け
タブレット769px〜1024pxタブレット向け
デスクトップ1025px以上PC向け
/* デフォルトスタイル(モバイルファースト) */
.my-element {
  font-size: 16px;
  padding: 10px;
}

/* タブレット向け */
@media (min-width: 769px) {
  .my-element {
    font-size: 18px;
    padding: 15px;
  }
}

/* デスクトップ向け */
@media (min-width: 1025px) {
  .my-element {
    font-size: 20px;
    padding: 20px;
  }
}Code language: CSS (css)

実用的なカスタマイズ例

以下に、上記の要素を組み合わせた実用的なカスタマイズ例をいくつか紹介します。

1. スティッキーヘッダーを半透明化してスクロール時に縮小

.site-header {
  position: sticky;
  top: 0;
  transition: all 0.3s ease;
  z-index: 999;
}

/* スクロール時のクラスをJSで追加 */
.site-header.scrolled {
  background-color: rgba(255, 255, 255, 0.95);
  padding: 5px 0;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}Code language: CSS (css)

JavaScript部分:

document.addEventListener('DOMContentLoaded', function() {
  const header = document.querySelector('.site-header');
  window.addEventListener('scroll', function() {
    if (window.scrollY > 50) {
      header.classList.add('scrolled');
    } else {
      header.classList.remove('scrolled');
    }
  });
});Code language: JavaScript (javascript)

2. 記事内の見出しに自動的にアンカーリンクを追加

function add_anchor_links_to_headings($content) {
  if (!is_singular('post')) return $content;

  $pattern = '/<h([2-3])(.*)>(.*)<\/h[2-3]>/i';
  $replacement = function($matches) {
    $level = $matches[1];
    $attrs = $matches[2];
    $title = $matches[3];
    $id = sanitize_title($title);

    return sprintf(
      '<h%s%s id="%s">%s <a href="#%s" class="heading-anchor">#</a></h%s>',
      $level, $attrs, $id, $title, $id, $level
    );
  };

  return preg_replace_callback($pattern, $replacement, $content);
}
add_filter('the_content', 'add_anchor_links_to_headings');Code language: PHP (php)

CSS部分:

.heading-anchor {
  opacity: 0;
  font-size: 0.8em;
  transition: opacity 0.2s;
  text-decoration: none;
  color: #aaa;
}
h2:hover .heading-anchor,
h3:hover .heading-anchor {
  opacity: 1;
}Code language: CSS (css)

3. カード型のブログ記事リストをカスタムCSS化

function add_card_layout_class($classes) {
  if (is_home() || is_archive()) {
    $classes[] = 'card-layout';
  }
  return $classes;
}
add_filter('body_class', 'add_card_layout_class');Code language: PHP (php)

CSS部分:

.card-layout .site-main {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: 30px;
}

.card-layout .inside-article {
  display: flex;
  flex-direction: column;
  height: 100%;
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 3px 15px rgba(0, 0, 0, 0.1);
  transition: transform 0.3s ease;
}

.card-layout .inside-article:hover {
  transform: translateY(-5px);
}

.card-layout .post-image {
  margin: 0;
}

.card-layout .post-image img {
  width: 100%;
  height: 200px;
  object-fit: cover;
}

.card-layout .entry-summary {
  padding: 0 20px 20px;
  flex-grow: 1;
}

.card-layout .entry-header {
  padding: 20px 20px 0;
}

.card-layout .entry-title {
  font-size: 20px;
  margin-bottom: 10px;
}

.card-layout .entry-meta {
  font-size: 14px;
  margin-bottom: 15px;
}

.card-layout .read-more-container {
  padding: 0 20px 20px;
  margin-top: auto;
}Code language: CSS (css)

まとめ

GeneratePressのサイト構造を理解し、適切なCSS要素とフックポイントを把握することで、より効率的で高度なカスタマイズが可能になります。重要なポイントは:

  1. サイト全体の構造(ヘッダー、コンテンツ、サイドバー、フッター)を理解する
  2. 各要素のCSS階層と命名規則を把握する
  3. アクションフックとフィルターフックを活用して適切な位置にコードを挿入する
  4. レスポンシブデザインのブレイクポイントを適切に使い分ける
  5. 子テーマを使って安全にカスタマイズを行う

これらの知識を活用することで、GeneratePressの軽量性と高速性を維持しながら、オリジナリティ溢れるサイトを構築できます。​​​​​​​​​​​​​​​​