web-dev-qa-db-ja.com

Wp_list_categories()にサムネイルを追加する

次のコードを使用して、私のホームページに分類用語のリストを表示します。

$customPostTaxonomies = get_object_taxonomies( 'guide' );

if( count( $customPostTaxonomies ) > 0 )
{
    foreach( $customPostTaxonomies as $tax )
    {
        $args = array(
            'orderby'       => 'name',
            'show_count'    => 0,
            'pad_counts'    => 0,
            'hierarchical'  => 1,
            'taxonomy'      => $tax,
        );

        wp_list_categories( $args );
    }
}

今、私はタイトルに追加しようとしています、私はこのリストにカスタムフィールドで設定したという用語のサムネイル(私は次のコードで出力することができます):

$saved_data = get_tax_meta( $term_id, 'image_field_id', true );
echo '<img src="' . $saved_data['src'] . '">';

私は本当にそれらを混ぜ合わせる方法がわからない...私はカスタムウォーカークラスについて読んだが私はそれを使用する方法がわからない。これを達成する方法の例を誰かに教えてもらえますか。

1
olivier

あなたはこれを試すことができます:

class List_Category_Images extends Walker_Category {
    function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
        $saved_data = get_tax_meta( $category->term_id, 'image_field_id', true );

        $cat_name = apply_filters(
            'list_cats',
            esc_attr( $category->name ),
            $category
        );

        $link = '<a href="' . esc_url( get_term_link( $category ) ) . '" ';
        if ( $args['use_desc_for_title'] && ! empty( $category->description ) ) {
            $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"';
        }

        $link .= '>';
        $link .= '<img src="' . $saved_data['src'] . '">';
        $link .= $cat_name . '</a>';

        if ( ! empty( $args['show_count'] ) ) {
            $link .= ' (' . number_format_i18n( $category->count ) . ')';
        }
        if ( 'list' == $args['style'] ) {
            $output .= "\t<li";
            $class = 'cat-item cat-item-' . $category->term_id;
            if ( ! empty( $args['current_category'] ) ) {
                $_current_category = get_term( $args['current_category'], $category->taxonomy );
                if ( $category->term_id == $args['current_category'] ) {
                    $class .=  ' current-cat';
                } elseif ( $category->term_id == $_current_category->parent ) {
                    $class .=  ' current-cat-parent';
                }
            }
            $output .=  ' class="' . $class . '"';
            $output .= ">$link\n";
        } else {
            $output .= "\t$link<br />\n";
        }
    }
}

私がしていることは、この場合関数が実際に用語/カテゴリへのリンクを作成している Walker_Categoryクラス 内のメソッドの1つを修正することです。メソッドの先頭でget_tax_meta()関数を呼び出します(これはWordPressには組み込まれていないため、うまくいきます)。次に、カテゴリの名前の直前に画像を追加します。

$link .= '>';
$link .= '<img src="' . $saved_data['src'] . '">';
$link .= $cat_name . '</a>';

今、あなたがする必要があるのはあなたのwp_list_categories()関数でこのクラスの新しいインスタンスを定義することだけです:

$args = array(
    'orderby'       => 'name',
    'show_count'    => 0,
    'pad_counts'    => 0,
    'hierarchical'  => 1,
    'taxonomy'      => $tax,
    'walker'        => new List_Category_Images
);
wp_list_categories( $args );
1
Howdy_McGee