web-dev-qa-db-fra.com

Besoin d'obtenir des données spécifiques du tableau

Je construis un carrousel personnalisé pour un client. J'ai une fonction qui obtient des blocs de trois images de toutes les images attachées à un message:

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 );

Tout ce dont j'ai besoin pour finaliser ceci est de remplacer inneritem par l'URL de l'image. Les données sont toutes présentes dans un tableau et, comme vous pouvez le constater, il suffit d'extraire la valeur de guid pour chaque élément. Le tableau ci-dessous découle de la suppression de la print_r( $split ); et j'ai supprimé toutes les données superflues pour des raisons de propreté:

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
        )
    )
)
3
warm__tape

Vous devriez pouvoir réécrire ce que vous avez sur et utiliser également get_permalink as @Benoti déclaré en omettant le tableau $split.

get_permalink accepte l'identifiant de publication ou un objet de publication.

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

Je n'ai rien testé et lu votre code, mais il semble que vous puissiez obtenir get_permalink () comme je l'ai dit dans le commentaire, mais il est vrai que vous obtiendrez la page de pièce jointe et non son URL.

Vous pouvez accéder à l'ID d'objet, guid facilement

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

Alors

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