web-dev-qa-db-ja.com

WordpressとLightboxで高度なカスタムフィールドを使う

ACFプラグイン を使用しています。私は画像をアップロードすることができるフィールドを持ちたい、そして結果はライトボックスの中にフルイメージを表示し、それからフル画像はそのフィールドからサムネイルにリサイズされるだろう(通常のライトボックスのように)。

これまでのところ私はここにスクリプトを持っています、そしてこれは私がいるところです:

<div class="single last">
<a href="<?php echo the_field('image_gallery'); ?>" rel="lightbox" title="<?php the_title(); ?>">

<?php
$main_car_pic = addslashes(the_repeater_field('image_gallery'));
$reg_ext = "#.jpg#i";
$thumb_ext = "-150x150.jpg";
$car_thumb = preg_replace($reg_ext, $thumb_ext, $main_car_pic);

echo $car_thumb
?>

ACF Repeaterフィールドが適切に機能していないため、ACFの使用経験があり、サムネイル用に画像のサイズを変更することができません。コメントを入力していただければ幸いです。助けるかもしれないものを供給することができます。

4
Owen O'Neill

ここではたくさんのことが起こっています。まず、リピーターフィールドの画像をIDとして保存し(おそらくサブフィールドの設定を変更し、場合によっては一部の画像を再アップロードする必要があります)、それを処理するためにすべてのWordPress Core API関数を使用します。 (おそらくパスを wp_get_attachment_image_src と交差させるでしょう。)これはあなたの正規表現を取り除き、あなたの画像サイズがadd_image_sizeを利用するようにします。

次に、リンクしているページのリピーターフィールドのコード例に従う必要があります。 get_repeater_field()は、ループのようなwhileステートメントとget_sub_field()を使用して反復できるオブジェクトを返します。(脇に置いておくと、get_field( 'a_repeater_field' )は配列を返すので、foreachステートメントを使って繰り返すことができます。)

最終的なコードは次のようになります。

<?php if( get_field('image_gallery') ) {
    while( the_repeater_field('image_gallery') ) {
        $large_img_src = wp_get_attachment_image_src( get_subfield('an_image_subfield'), 'large' );
        echo '<a href="' . $large_img_src[0] . '">' . wp_get_attachment_image( get_sub_field('an_image_subfield'), 'thumbnail' ) . '</a>';
    }
} ?>

'thumbnail'と 'large'を配列またはカスタムの画像サイズに置き換えることができます。

4
mrwweb