web-dev-qa-db-fra.com

Sortie WordPress JSON

Mise à jour: j'ai changé le code comme suit

$cats = get_categories();
$output = array('categories' => array());

function collect_posts(){
    $args = array( 'numberposts=' => 9999, 'category' => $cat );
    $myposts = get_posts( $args );
    foreach( $myposts as $post ) {
        setup_postdata($post); 
        if (get_post_meta($post->ID, 'apls_video_youtube', true) != ''){
        $url = 'http://www.youtube.com/watch?v=';
        $url .= get_post_meta($post->ID, 'apls_video_youtube', true);
        } else {
            $url = get_post_meta($post->ID, 'apls_video_hosted', true);
        }
        $output['posts'][] = array(
            'name' => get_the_title($post->ID),
            'url' => $url,
        );
        return $output;
    }       
}

foreach ($cats as $cat) {

    $output['categories'][] = array(
        'cat_id' => $cat->term_id,
        'cat_name' => $cat->name,
        collect_posts()
    );
}

header("Content-type: application/json");
die(json_encode($output));

La sortie est:

{
    "categories": [
        {
            "cat_id": "555",
            "cat_name": "Articles",
            "0": {
                "posts": [
                    {
                        "name": "title",
                        "url": "http://www.domain.com......."
                    }
                ]
            }
        },
        {
            "cat_id": "15",
            "cat_name": "Crank",
            "0": {
                "posts": [
                    {
                        "name": "title examlple",
                        "url": "http://www.domain.com/v......"
                    }
                ]
            }
        },
        {......

Le problème est:

Un seul message est affiché Le même message est affiché dans chaque catégorie A 0(zero) a été ajouté

J'ai donc besoin de votre suggestion pour résoudre le problème.

========================== Partie précédente ===================== ===

Je veux obtenir json comme

 {
    "categories": [
        {
            "cat_id": "16",
            "cat_name": "Arm Lock",
            "posts": [
                {
                    "name": "Video1",
                    "url": "http://www.videourl1.com/"
                },
                {
                    "name": "Video2",
                    "url": "http://www.videourl2.com/"
                },
                {
                    "name": "Video2",
                    "url": "http://www.videourl3.com/"
                }
            ]
        },
        {
            "cat_id": "12",
            "cat_name": "Kick",
            "posts": [
                {
                    "name": "Video1",
                    "url": "http://www.videourl3.com/"
                },
                {
                    "name": "Video2",
                    "url": "http://www.videourl3.com/"
                },
                {
                    "name": "Video2",
                    "url": "http://www.videourl3.com/"
                }
            ]
        }
    ]
}

Donc codé comme

// get all the categories from the database
$cats = get_categories();

header('Content-type: application/json');
echo '{
   "categories": [';
foreach ($cats as $cat) {
// setup the cateogory ID
$cat_id= $cat->term_id;
query_posts("cat=$cat_id&posts_per_page=9999");
echo '
      {
    "cat_id": "'.$cat_id.'",';
echo '
    "cat_name": "'.$cat->name.'",';
echo '
    "posts": [';
if (have_posts()) : while (have_posts()) : the_post();
if (get_post_meta($post->ID, 'apls_video_youtube', true) != ''){
    $url = 'http://www.youtube.com/watch?v=';
    $url .= get_post_meta($post->ID, 'apls_video_youtube', true);
} else {
    $url = get_post_meta($post->ID, 'apls_video_hosted', true);
}

echo '  
      {';
echo '  
        "name": "'.get_the_title().'", ';
echo '  
        "url": "'.$url.'"';
echo '  
      },';
endwhile; endif; 
echo '
     ]';
echo '
   },';
}

echo '
  ]';
echo '
}';

Cela a fonctionné pour moi, mais j'ai eu un problème avec "," au dernier élément de chaque boucle. La sortie JSON est donc invalide pour le poursuivant. Comment puis-je le réparer?

5
PHPLearner

Si vous utilisez PHP 5.2+, le mieux est de créer un tableau ou un objet PHP et d'utiliser json_encode () .

MIS À JOUR:

$cats = get_categories();
$output = array('categories' => array());

foreach ($cats as $cat) {
    $cat_output = array(
        'cat_id' => $cat->term_id,
        'cat_name' => $cat->name,
        'posts' => array(),
    );

    // should be able to use -1 to get all posts, rather than 9999
    $args = array('numberposts=' => -1, 'category' => $cat->cat_ID);
    $myposts = get_posts($args);

    foreach( $myposts as $post ) {
        if ($youtube_id = get_post_meta($post->ID, 'apls_video_youtube', TRUE)) {
            $url = "http://www.youtube.com/watch?v={$youtube_id}";
        } else {
            $url = get_post_meta($post->ID, 'apls_video_hosted', TRUE);
        }

        $cat_output['posts'][] = array(
            'name' => get_the_title($post->ID),
            'url' => $url,
        );
    }

    $output['categories'][] = $cat_output;
}

header("Content-type: application/json");
die(json_encode($output));
8
totels