json_encode の出力に苦労しています。1日に1回更新されるjsonファイルにすべてを保存し、必要に応じてそれを呼び出すことにより、大きなドロップダウンナビゲーションメニューを高速化しようとしています。
私はjson_encodeを使用してjsonを生成していますが、すべてを追加の不要な配列にループしているようで、これを防ぐ方法がわかりません。
str_replace をいじってみましたが、有効な json を生成することに成功しませんでした (ただし、これは実際には長期的な解決策ではありません)。また、ネストされた配列に入る必要がある「各」の組み合わせを見つけようとしましたが、正しい組み合わせが見つかりませんでした。
以下は、私が最終的に作成したjsonです(見やすくするためにエントリの数を減らしました。形式は同じです...フィルム、ゲームなどのそれぞれの中に、より多くのアイテムがあります)。
[
[
"Film",
[
{
"title": "13 Awkward Moments That Must Have Happened After The End Of Famous Movies",
"link": "http:\/\/whatculture.com\/film\/13-awkward-moments-that-must-have-happened-after-the-end-of-famous-movies.php",
"image": [
"http:\/\/cdn3.whatculture.com\/wp-content\/uploads\/2013\/08\/HP-100x60.jpg",
100,
60,
true
]
}
]
],
[
"TV",
[
{
"title": "10 Awesome TV Twists You Never Saw Coming",
"link": "http:\/\/whatculture.com\/tv\/10-awesome-tv-twists-you-never-saw-coming.php",
"image": [
"http:\/\/cdn3.whatculture.com\/wp-content\/uploads\/2013\/08\/lost-locke-100x60.jpg",
100,
60,
true
]
}
]
],
[
"Gaming",
[
{
"title": "WWE 2K14: Every Possible Classic Match",
"link": "http:\/\/whatculture.com\/gaming\/wwe-2k14-every-possible-classic-match.php",
"image": [
"http:\/\/cdn3.whatculture.com\/wp-content\/uploads\/2013\/08\/444-100x60.jpg",
100,
60,
true
]
}
]
]
]
そして、これは私が上記のコードを生成するために使用しているスクリプトです:
完全を期すためにすべてを含めました。以下の多くは、関連データを取得するための Wordpress クエリです。
$cats = array("Film","TV","Gaming","Sport","Music");
function filter_where($where = '') {
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-3 days')) . "'";
return $where;
}
add_filter('posts_where', 'filter_where');
foreach($cats as $cat) {
$the_query = array(
'numberposts' => 5,
'category_name' => $cat,
'meta_key' => "visitcount",
'orderby' => "meta_value_num",
'suppress_filters' => false );
$special_query_results = get_posts($the_query);
foreach( $special_query_results as $post ) {
setup_postdata($post);
$myposts[] = array('title'=> html_entity_decode(get_the_title()),'link'=>get_permalink(get_the_ID()),'image'=>wp_get_attachment_image_src( get_post_thumbnail_id(get_the_ID()), 'smallthumb' ));
}
$pop_posts[] = array($cat,$myposts);
unset($myposts);
} // foreach cats as cat1000
wp_reset_postdata();
remove_filter('posts_where', 'filter_where');
$json_pop = json_encode($pop_posts,JSON_PRETTY_PRINT);
これは、ユーザーがナビゲーション項目にカーソルを合わせたときにそれを引き戻すために使用しているものです。
$.getJSON('http://whatculture.com/data/wc6.json', function(popular) {
$.each(popular.Sport, function() {
$('.popularMenu').append("<li><a href="+this.link+"><img src="+this.image[0]+" />"+this.title+"</a></li>");
});
});