web-dev-qa-db-ja.com

配列から特定のデータを取得する必要がある

クライアント用のカスタムカルーセルを作成しています。投稿に添付されているすべての画像から3つの画像のブロックを取得する関数があります。

global $rental;

$images = get_children( array(
    'post_parent' => $rental_id,
    'post_status' => 'inherit',
    'post_type' => 'attachment',
    'post_mime_type' => 'image',
    'order' => 'ASC',
    'orderby' => 'menu_order ID'
) );

$array = $images;
$number_of_elements = 3;
$count = count( $array );
$split = array();

for ( $i = 0; $i <= $count - 1; $i++ ) {
    $slices = array_slice( $array, $i , $number_of_elements);
    if ( count( $slices ) != $number_of_elements )
        break;

    $split[] = $slices;
}

if ($split) :
    foreach ($split as $outeritem) :    
        echo '<div class="Outer Top">';
            foreach ($split as $inneritem) :
                echo '<div class="Inner Top">';
                echo '<img src="' . $inneritem . '">';
                echo '</div>';
             endforeach;
        echo '</div>';
    endforeach;
endif;

//print_r( $split );

これを完成させるために必要なのは、inneritemを画像のURLに置き換えることだけです。データはすべて配列内にあります。見てのとおり、各項目について guid の値を取得する必要があります。以下の配列はprint_r( $split );のコメントを外したことによるもので、整理のために余分なデータをすべて削除しました。

Array (
    [0] => Array (
        [0] => WP_Post Object (
            [ID] => 120
            [guid] => http://******/wp-content/uploads/2016/12/T15923-11-1-1.jpg
        )
        [1] => WP_Post Object (
            [ID] => 121
            [guid] => http://******/wp-content/uploads/2016/12/T15923-12-1-1.jpg
        )
        [2] => WP_Post Object (
            [ID] => 122
            [guid] => http://******/wp-content/uploads/2016/12/T15898.jpg
        )
    )
    [1] => Array (
        [0] => WP_Post Object (
            [ID] => 121
            [guid] => http://******/wp-content/uploads/2016/12/T15923-12-1-1.jpg
        )
        [1] => WP_Post Object (
            [ID] => 122
            [guid] => http://******/wp-content/uploads/2016/12/T15898.jpg
        )
        [2] => WP_Post Object (
            [ID] => 123
            [guid] => http://******/wp-content/uploads/2016/12/T15923-13-1-1.jpg
        )
    )
    [2] => Array (
        [0] => WP_Post Object (
            [ID] => 122
            [guid] => http://******/wp-content/uploads/2016/12/T15898.jpg
        )
        [1] => WP_Post Object (
            [ID] => 123
            [guid] => http://******/wp-content/uploads/2016/12/T15923-13-1-1.jpg
        )
        [2] => WP_Post Object (
            [ID] => 124
            [guid] => http://******/wp-content/uploads/2016/12/T15923-14-1.jpg
        )
    )
)
2
warm__tape

get_permalink配列を省略しながら、 $split のように @Benoti を使って、自分の持っているものを書き直すことができるはずです。

get_permalink はPost IDまたはpostオブジェクトを受け入れます。

global $rental;

$images = get_children( array(
    'post_parent' => $rental_id,
    'post_status' => 'inherit',
    'post_type' => 'attachment',
    'post_mime_type' => 'image',
    'order' => 'ASC',
    'orderby' => 'menu_order ID'
) );

$array = $images;
$number_of_elements = 3;
$count = count( $array );

for ( $i = 0; $i <= $count - 1; $i++ ) {
    $slices = array_slice( $array, $i , $number_of_elements);
    if ( count( $slices ) != $number_of_elements )
        break;

    echo "<div class='Outer Top'>";
    foreach( $slices as $inneritem ) {
        $link = wp_get_attachment_url( $inneritem->ID );
        echo "<div class='Inner Top'>";
        echo "<img src=' $link  '>";
        echo "</div>";
    }
    echo "</div>";
}
1
Tunji

何もテストせずにコードを読みましたが、コメントで述べたようにget_permalink()を実行できるようですが、URLではなく添付ページが表示されるのは事実です。

あなたは簡単にguid、オブジェクトIDにアクセスすることができます

wp_get_attachment_url($inneritem[$i]->ID);

そう

if ($split) :
foreach ($split as $outeritem) :    
    echo '<div class="Outer Top">';
    $i=0;
        foreach ($split as $inneritem) :
            echo '<div class="Inner Top">';
            echo '<img src="' . wp_get_attachment_url($inneritem[$i]->ID) . '">';
            echo '</div>';
            $i++;
         endforeach;
    echo '</div>';
    endforeach;
endif;
3
Benoti