For a Wordpress image gallery plugin, I need to take an array of integers (representing the ID of images), loop through the array and get certain pieces of data based on the integer/ID, and then build an array, which will then be JSON encoded.
For example, I have this piece of code that will spit out the images on the front end.
OK, what have you tried so far? It seems as if you have all the building blocks, and just need to create the array instead of (or as well as) outputting the information. I haven’t done much with JSON, is it just as simple as building your array and then calling json_encode() ?
According to my experiences I would suggest you to create an empty array before the loop starts, And once you have done it add an associative array to it on each iteration. Try it!!!
Just having a tinker with a bit of PHP and possibly off by a country mile. Would something along these lines work?
// created a couple of user defined functions as I think it makes the code less jumbled
// and easier to reason with.
// possibly more arguments like $static_text needed
function create_image_link($full_src, $thumb_src) {
// using heredoc syntax as I think it is more readable
return <<<LINK
<a
data-lg-size="2500-2500"
class="gallery-item"
data-src="$full_src"
data-sub-html="Some static text"
>
<img class="img-fluid" src="$thumb_src" />
</a>
LINK;
}
// don't know the format of the $img_props, but using the idea of a factory to create each object
function create_image_props($img_props) {
list($img_url, $img_responsive, $img_thumb, $html) = $img_props
return array(
"src" => $img_url,
"responsive" => $img_responsive,
"thumb" => $img_thumb,
"subHtml" => $html
);
}
$images = [];
foreach($image_array as $key => $value) {
$image = get_post_meta( $value, '_wp_attachment_metadata', true );
$full_src = wp_get_attachment_image_src($value, 'full')[0];
$thumb_src = wp_get_attachment_image_src($value, 'thumbnail')[0];
$meta = wp_get_attachment_metadata($value);
$large_file = $meta['sizes']['large']['file'];
if ($gallery_style != "grid"){
$img_props = array_slice($image_array, 0, 3);
$images.push(create_image_props($img_props));
echo create_image_link($full_src, $thumb_src);
}
}
$images_JSON = json_encode($images);
A bit of a shot in the dark. I am sure the experts can pull this apart
I think you are right, that is off. I grabbed the OP’s original code.
$items = array_slice($image_array,0,3);
Where is subHtml, responsive coming from. Is src, $full_src and is thumb, $thumb_src? Really could do with seeing a sample of what $image_array looks like.
What are the variables $image, $meta and $large_file? They aren’t being used in the code, that I can see. What is their intended use. Are these used for the above props?