web-dev-qa-db-ja.com

ACFのImage Custom FieldをGenesis Frameworkで正しく表示できない

WP 4.7.3、型、Genesis Sample Theme、ACF、およびいくつかの非常によく知られたプラグインを含みます。特別なものでも非標準のものでもありません。

Advanced Custom Fields Repeater Fieldのカスタムフィールドをページまたはテンプレートに正しく表示する方法を知っています。私の場合は、投稿ごとに、3つの可能な画像カスタムフィールドのうちの1つを入力しました。したがって、その1つの画像サイズを取得するには、次のようになります。

$count = get_post_meta( get_the_ID(), 'items', true );

    if ( $count ) {

        for ( $i = 0; $i < $count; $i++ ) {

            $item_100x100   = get_post_meta( get_the_ID(), 'items_' . $i . '_item_100x100', true );
            $item_200x200   = get_post_meta( get_the_ID(), 'items_' . $i . '_item_200x200', true );
            $item_300x300   = get_post_meta( get_the_ID(), 'items_' . $i . '_item_300x300', true );

            if ( $item_100x100 ) {
                echo '<p class="overview">' . wp_get_attachment_image( $item_100x100, 'items' ) . '</p>';
            } elseif ( $item_200x200 ) {
                echo '<p class="overview">' . wp_get_attachment_image( $item_200x200, 'items' ) . '</p>';
            } elseif ( $item_300x300 ) {
                echo '<p class="overview">' . wp_get_attachment_image( $item_300x300, 'items' ) . '</p>';
            }

        }

    }

私はそれが正しいと思います、そしてそれはちょうどうまく働きます。

それから、私はarchive-cpt.phpファイルに取り組んでいます。そのファイルには、その画像を含め、見つかったすべての投稿に対していくつかのカスタムフィールドを表示する必要があります。

今度は、おすすめの画像を表示する必要がある場合は、次のようにします。

// Featured image
if ( $image = genesis_get_image( 'format=url&size=item-image' ) ) {
    printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image, the_title_attribute( 'echo=0' ) );
}

// Entry title
echo '<h2 class="entry-title" itemprop="headline"><a href="' . get_permalink() . '">'. get_the_title() .'</a></h2>';

しかし、私は記事のおすすめ画像を表示していません。ACFRepeater Fieldからの画像タイプのカスタムフィールドを表示しようとしています。

私が行った場合:

if ( $item_100x100 ) {
    $image = wp_get_attachment_image( $item_100x100, 'items' );
} elseif ( $item_200x200 ) {
    $image = wp_get_attachment_image( $item_200x200, 'items' );
} elseif ( $slope_map_300x300 ) {
    $image = wp_get_attachment_image( $item_300x300, 'items' );
}

printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image, the_title_attribute( 'echo=0' ) );

画像が画面に印刷されますが、文字列が続きます。

"alt =" my-alt-text "クラス=" alignleft "/>

その次。

私は他のいくつかのことを試みたが、私は同じ結果になったか、単に記事のタイトルが記事にリンクされていて画像がないことになった。

誰かが手伝ってくれる?前もって感謝します。

注:私はACFのget_field()などのコマンドを使用していません。a)はWPネイティブな方法ではないため、b)データベースクエリを追加するためです。柔軟なコンテンツ)。ネイティブWPでは、すべてに対してデータベースクエリを1つだけ追加します。

2
Karls

さて、ACF Repeater Fieldの完全なコードを使った正しい答えは、次のとおりです。

$count = get_post_meta( get_the_ID(), 'items', true );

if ( $count ) {

    for ( $i = 0; $i < $count; $i++ ) {

        $item_100x100   = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_100x100', true ) );
        $item_200x200   = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_200x200', true ) );
        $item_300x300   = intval( get_post_meta( get_the_ID(), 'items_' . $i . '_item_300x300', true ) );

        if ( $item_100x100 ) {
            $image_id = wp_get_attachment_image_src( $item_100x100, 'full' );
        } elseif ( $item_200x200 ) {
            $image = wp_get_attachment_image_src( $item_200x200, 'full' );
        } elseif ( $item_300x300 ) {
            $image = wp_get_attachment_image_src( $item_300x300, 'full' );
        }

        if ( $image ) {
            echo '<a href="' . get_permalink() . '" rel="bookmark"><img src="' . $image[0] . '" alt="' . the_title_attribute( 'echo=0' ) . '">';

        }

    }

}

または、代わりに

エコー

一部、あなたがすることができます:

printf( '<a href="%s" rel="bookmark"><img src="%s" alt="%s" class="alignleft" /></a>', get_permalink(), $image[0], the_title_attribute( 'echo=0' ) );

あなたはただあなたの望みの画像サイズに 'フル'を変更する必要があります。

更新:@boscoが以下に指摘するように、wp_get_attachment_imageはHTML要素全体を返します。画像のURLでsrc属性を設定できるようにしたいだけです。そのため、コードではwp_get_attachment_image_srcを使用します。私はHTMLをいじっていたことに気づきました。

1
Karls