web-dev-qa-db-ja.com

Wp_titleにカテゴリのタイトルを含む

私はこれをfunctions.phpで使って私のページ<title>を出力します。

/**
 * Creates a nicely formatted and more specific title element text
 * for output in head of document, based on current view
 *
 * @param string $title Default title text for current view
 * @param string $sep Optional separator
 * @return string Filtered title
 */
function sitename_wp_title( $title, $sep ) {
    global $paged, $page;

    if ( is_feed() )
        return $title;

    // Adds the site name
    $title .= get_bloginfo( 'name' );

    // Adds the site description for the front page
    $site_description = get_bloginfo( 'description', 'display' );
    if ( $site_description && ( is_front_page() ) )
        $title = "$title $sep $site_description";

    // Adds a page number if necessary
    if ( $paged >= 2 || $page >= 2 )
        $title = "$title $sep " . sprintf( __( 'Page %s' ), max( $paged, $page ) );

    return $title;
}
add_filter( 'wp_title', 'sitename_wp_title', 10, 2 );

サブページにトップレベルのカテゴリ名を含めたいのですが。

たとえば、現在このサイト構造の場合:

  • ホーム
  • 作業
    • 小さい
  • 接触

「大」カテゴリの投稿は、次のようなページタイトルを出力します。

<title>$postname | $blog_name</title>

出力は以下のようにします。

<title>$postname | Work | $blog_name</title>

そのため、最上位のカテゴリ名は追加されますが、二次レベルのカテゴリは追加されません(大)。

1
AlecRust

すべての親カテゴリを取得するためのヘルパー関数を作成します(各投稿は複数のカテゴリに属する​​ことができます)。

function parent_cat_names( $sep = '|' )
{
    if ( ! is_single() or array() === $categories = get_the_category() )
        return '';

    $parents = array ();

    foreach ( $categories as $category )
    {
        $parent = end( get_ancestors( $category->term_id, 'category' ) );

        if ( ! empty ( $parent ) )
            $top = get_category( $parent );
        else
            $top = $category;

        $parents[ $top->term_id ] = $top;
    }

    return esc_html( join( $sep, wp_list_pluck( $parents, 'name' ) ) );
}

…で親用語を追加

if ( '' !== $parent_cats = parent_cat_names( $sep ) )
    $title .= "$parent_cats $sep ";
2
fuxia