目次
現在のページタイトルを非表示にする
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>';
}