web-dev-qa-db-ja.com

ループ内のカテゴリのURLを取得

メタスニペットに入れるためのカテゴリURLを取得する必要があります。今度はスパンの中の出力はurlのタグです。私はタグなしでURLだけを取得して$ cat_displayの中に置く必要があります。私は2つのオプションを試してみますが、私はエラーが表示されます。注意:非オブジェクトのプロパティを取得しようとしています

// Get post category info
$category = get_the_category();

if(!empty($category)) {
        // Get last category post is in
        $last_category = $category[count($category) - 1];

        // Get parent any categories and create array
        $get_cat_parents = rtrim(get_category_parents($last_category->term_id, true, ','),',');
        $cat_parents = explode(',',$get_cat_parents);

        //$category_link = get_category_link( $category_id );
        $cat_parents_url = get_category_link($cat_parents->term_id);
        // Loop through parent categories and store in variable $cat_display
        $cat_display = '';
        foreach($cat_parents as $parents) {
                $cat_display .= '<li class="item-cat" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="item"><span itemprop="name">'.$parents .'</span></span><meta itemprop="position" content="'. $counter++ .'" /></li>';
                $cat_display .= '<li class="separator"> ' . $separator . ' </li>';
        }

}
1
user3309614

Notice:非オブジェクトのプロパティを取得しようとしています

これは$cat_parentsobjectではないためです。それはarrayです:

$cat_parents_url = get_category_link($cat_parents->term_id);

次に、カテゴリURLだけを取得するには、 get_category_parents()secondパラメータをfalseに設定して呼び出します。そう:

$get_cat_parents = rtrim(get_category_parents($last_category->term_id, false, ','),',');

$get_cat_parentsは、カテゴリスラッグのリスト/ stringとなり、<a href="http://example.com/category/slug">Name of the category here</a>のようなHTML形式のカテゴリリンクではありません。

それから、foreachループでは、カテゴリURLを次のようにして取得できます。

foreach($cat_parents as $slug) {
    $term = get_category_by_slug( $slug );
    if ( ! $term ) {
        continue;
    }

    $cat_url = esc_url( get_category_link( $term->term_id ) );
    ...
}

すなわちget_category_by_slug()を使用してカテゴリ/用語object/dataを取得し、次にget_category_link()を使用してカテゴリURLを取得します。

これが私が使った完全なコードです:(明確にするために再インデント)

// Get post category info
$category = get_the_category();

if(!empty($category)) {
    // Get last category post is in
    $last_category = $category[count($category) - 1];

    // Get parent any categories and create array
    $get_cat_parents = rtrim(get_category_parents($last_category->term_id, false, ','),',');
    $cat_parents = explode(',',$get_cat_parents);

    $cat_display = '';
    $separator = ', '; // not defined; so I defined it here.
    $counter = 0;      // not defined; so I defined it here.
    foreach($cat_parents as $slug) {
        $term = get_category_by_slug( $slug );
        if ( ! $term ) {
            continue;
        }

        $cat_url = esc_url( get_category_link( $term->term_id ) );

        $cat_display .= '<li class="item-cat" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="item"><span itemprop="name">'.$cat_url .'</span></span><meta itemprop="position" content="'. $counter++ .'" /></li>';
        $cat_display .= '<li class="separator"> ' . $separator . ' </li>';
    }

    echo $cat_display; // test

}
0
Sally CJ