0

I'm trying to pull in the JSON data from my API, and get the data out of each key to display nicely in HTML/CSS. Right now having trouble getting the data.

This is my db object:

[
    {
        "_id":"54bd5fbb646174009a450001",
        "productname":"Product 1",
        "overview":"Overview Title",
        "benefits":
            [
                "List item 1",
                "List item 2",
                "List item 3"
            ]
    }
]

I found this answer here, and the var_dump is working, it displays my db object on the page. This is my updated wordpress php plugin:

<?php
add_shortcode('mis', function($atts, $data) {

    $service_url = 'http://local.web.tt.com:8615/api/users';

    //  Initiate curl
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL,$service_url);
    $result=curl_exec($ch);
    curl_close($ch);

    // Will dump a beauty json :3
    // var_dump(json_decode($result, true));
    $data = (json_decode($result, true));
    var_dump($data);

    $data = add_shortcode (
        array(
            'name' => 'name',
            'overview' => 'overview',
            'benefits' => 'benefits'
        ), $data
    );

    extract($data);

    $content .='
        <style>li { margin-left: 20px; }</style>
        <h2>$name</h2>
        <p>$overview</p>
        <ul>
            <li>$data["benefits"][0]</li>
            <li>$data["benefits"][2]</li>
        </ul>';

    return $content;
 });

However I'm having trouble getting the data out:

enter image description here

This is where my problem is:

$data = (json_decode($result, true));
var_dump($data);

$data = add_shortcode (
    array(
        'name' => 'name',
        'overview' => 'overview',
        'benefits' => 'benefits'
    ), $data
);

extract($data);

$content .='
    <style>li { margin-left: 20px; }</style>
    <h2>$name</h2>
    <p>$overview</p>
    <ul>
        <li>$data["benefits"][0]</li>
        <li>$data["benefits"][1]</li>
    </ul>';

return $content;

How do I get the data from the var_dump, into the right keys/vars in my $content variable?

Community
  • 1
  • 1
Leon Gaban
  • 36,509
  • 115
  • 332
  • 529

1 Answers1

3

This section of code is quite strange - what is it intended to do?

$data = add_shortcode (
    array(
        'name' => 'name',
        'overview' => 'overview',
        'benefits' => 'benefits'
    ), $data
);

extract($data);

To access your data you can simply do

$data[0]['productname']

You also have your output variables inside a string (inside ''). To bring your data in to the output try:

$data = (json_decode($result, true));
var_dump($data);
$product = $data[0];
$content = '<style>li { margin-left: 20px; }</style>';
$content .='<h2>' . $product['productname'] . '</h2>
    <p>' . $product['overview'] . '</p>
    <ul>
        <li>' . $product["benefits"][0] . '</li>
        <li>' . $product["benefits"][1] . '</li>
    </ul>';

Or with a loop:

$data = (json_decode($result, true));
$content = '<style>li { margin-left: 20px; }</style>';
foreach($data as $product) {
    $content .='<h2>' . $product['productname'] . '</h2>
    <p>' . $product['overview'] . '</p>
    <ul>';
    foreach($product['benefits'] as $benefit) {
        $content .= '<li>' . $benefit . '</li>';
    }
    $content .= '</ul>';

}
James Waddington
  • 2,894
  • 2
  • 15
  • 24