特定のページのみ、ぱんくずリストでタイトルを非表示にする

目次

現在のページタイトルを非表示にする

WordPressのブログ記事詳細ページで現在のページのタイトルを非表示にしたいというご要望をいただきました。

ぱんくずの実装にはプラグイン「Breadcrumb NavXT」を使用していました。

参考サイト

add_action('bcn_after_fill', 'bcnext_remove_current_item');

function bcnext_remove_current_item($trail) {
    // 例:特定のページ(single.php、single-news.php)の場合のみ適用
    if (is_singular(array('post', 'news'))) {
        // 操作対象のパンくずリストが存在するか確認
        if (isset($trail->breadcrumbs[0]) && $trail->breadcrumbs[0] instanceof bcn_breadcrumb) {
            $types = $trail->breadcrumbs[0]->get_types();
            // パンくずリストのタイプが配列で、かつ 'current-item' タイプが含まれているか確認
            if (is_array($types) && in_array('current-item', $types)) {
                // 先頭の現在のページを削除
                array_shift($trail->breadcrumbs);
            }
        }
    }
}

個別ページはタイトル手前の区切り線まで、それ以外のページは該当ページタイトルまで表示

プラグインを使用した状態でページごとの細かいカスタマイズができなかったため、

カスタムコードに書きかえました。

結論、ページごとに全て設定する必要がありめちゃくちゃ大変でした。。

おすすめしませんが、どこかで役に立つかもしれないので残しておきます。

// ぱんくずカスタマイズ

function custom_breadcrumb()
{
    if (is_front_page()) return; // トップページでは表示しない

    echo '<nav class="breadcrumb">';
    echo '<a href="' . home_url() . '">Top</a>'; // すべてのページで統一

    if (is_home()) {
        // ブログ一覧ページ
        echo ' > <span class="breadcrumb_last">ブログ</span>';
    } elseif (is_single()) {
        $post_type = get_post_type();

        // 投稿タイプごとのアーカイブリンク
        if ($post_type === 'post') {
            echo ' > <a href="' . get_permalink(get_option('page_for_posts')) . '">ブログ</a>';
        } elseif ($post_type === 'news') {
            echo ' > <a href="' . get_post_type_archive_link('news') . '">ニュース</a>';
        } elseif ($post_type === 'seminar') {
            echo ' > <a href="' . get_post_type_archive_link('seminar') . '">セミナー</a>';
        }

        // 記事のカテゴリー(ブログ記事のみ)
        if ($post_type === 'post') {
            $categories = get_the_category();
            if (!empty($categories)) {
                $category = $categories[0]; // 最上位のカテゴリー
                echo ' > <a href="' . get_category_link($category->term_id) . '">' . esc_html($category->name) . '</a>';
            }
        }
        // 「news-cat」のタクソノミーを取得して表示**
        $terms = get_the_terms(get_the_ID(), 'news-cat'); // 'news-cat' はタクソノミーのスラッグ
        if (!empty($terms) && !is_wp_error($terms)) {
            $first_term = array_shift($terms); // 最初のタクソノミーのみ取得
            echo ' > <a href="' . get_term_link($first_term) . '">' . esc_html($first_term->name) . '</a>';
        }

        echo ' > ';
    } elseif (is_category()) {
        // 通常の投稿(ブログ)のカテゴリーページ
        echo ' > <a href="' . get_permalink(get_option('page_for_posts')) . '">ブログ</a>';
        echo ' > <span class="breadcrumb_last">' . single_cat_title('', false) . '</span>';
    } elseif (is_tag()) {
        //  ブログのタグページ(tag.php)
        echo ' > <a href="' . get_permalink(get_option('page_for_posts')) . '">ブログ</a>';
        echo ' > <span class="breadcrumb_last">' . single_term_title('', false) . '</span>';
    } elseif (is_date()) {

        $post_type = get_query_var('post_type'); // 現在の投稿タイプを取得
        if ($post_type === 'seminar') {
            $debug_post_type = get_query_var('post_type');
            echo '<!-- Debug: post_type = ' . esc_html($debug_post_type) . ' -->';
            echo ' > <a href="' . get_post_type_archive_link('seminar') . '">セミナー</a>';
        } else {
            // ** 年・月ごとのパンくずリストを表示**
            $blog_page_id = get_option('page_for_posts');
            $blog_page_url = ($blog_page_id) ? get_permalink($blog_page_id) : get_post_type_archive_link('post');

            echo ' > <a href="' . esc_url($blog_page_url) . '">ブログ</a>';
        }
        if (is_year()) {
            // **「2025年」のみ**
            echo ' > <span class="breadcrumb_last">' . get_the_date('Y年') . '</span>';
        } elseif (is_month()) {
            // **「2025年 > 3月」のように年リンクを作成**
            echo ' > <a href="' . get_year_link(get_the_date('Y')) . '">' . get_the_date('Y年') . '</a>';
            echo ' > <span class="breadcrumb_last">' . get_the_date('n月') . '</span>';
        }
    } elseif (is_tax('news-cat')) {
        // newsカスタム投稿のタクソノミーページ
        echo ' > <a href="' . get_post_type_archive_link('news') . '">ニュース</a>';
        echo ' > <span class="breadcrumb_last">' . single_term_title('', false) . '</span>';
    } elseif (is_tax('seminar-tag')) {
        // ** seminar-tag(セミナーのタグ)のアーカイブページ**
        echo ' > <a href="' . get_post_type_archive_link('seminar') . '">セミナー</a>';
        echo ' > <span class="breadcrumb_last">' . single_term_title('', false) . '</span>';
    } elseif (is_tag()) {
        echo ' > <a href="' . get_post_type_archive_link('news') . '">ニュース</a>';
        echo ' > <span class="breadcrumb_last">' . single_term_title('', false) . '</span>';
    } elseif (is_archive()) {
        if (is_post_type_archive('news')) {
            echo ' > <span class="breadcrumb_last">ニュース</span>';
        } else {
            echo ' > <span class="breadcrumb_last">' . post_type_archive_title('', false) . '</span>';
        }
    } elseif (is_page()) {
        echo ' > <span class="breadcrumb_last">' . get_the_title() . '</span>';
    } elseif (is_archive()) {
        // カスタム投稿タイプのアーカイブ
        if (is_post_type_archive('news')) {
            echo ' > <span class="breadcrumb_last">ニュース</span>';
        } elseif (is_post_type_archive('seminar')) {
            echo ' > <span class="breadcrumb_last">セミナー</span>';
        } else {
            echo ' > <span class="breadcrumb_last">' . post_type_archive_title('', false) . '</span>';
        }
    } elseif (is_page()) {
        // 固定ページ
        echo ' > <span class="breadcrumb_last">' . get_the_title() . '</span>';
    }

    echo '</nav>';
}
よかったらシェアしてね!
  • URLをコピーしました!
目次