我正在使用Wordpress,我正在循环我的文章,每篇文章我都在创建一个案例并添加一个类。案例名称和班级名称取自附加到每个帖子的自定义字段。
然而,如果我有2篇与国家相关的文章,那么会发生什么?澳大利亚,循环人员会说"在这个班级找到一篇关于澳大利亚的文章,设置一个案例并添加其类#34;。但是,如果我有2篇与澳大利亚相关的文章,那么已经为它创建了案例,因此我无法添加第二个类,因为它会跳过它。因此,我认为我做错了,我不应该使用switch case
。
我们的想法是检查country custom field
和sovereignt property within the geoson
之间的匹配,以便我可以绘制国家多边形,如果有任何文章与某个国家相关,但如果我有2篇与之相关的文章一个国家,多边形只画了一次但是上面有类问题。
geojson = L.geoJson(statesData, {
style: style,
style: function(feature) {
<?php
query_posts(array(
'post_type' => 'post',
'showposts' => -1
));
?>
switch (feature.properties.sovereignt) {
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
case '<?php the_field("country"); ?>': return {className: '_<?php the_field("year"); ?>'};
<?php endwhile; endif;?>
}
},
onEachFeature: onEachFeature
}).addTo(map);
获得了切换案例
答案 0 :(得分:0)
你错误的是每两行混合PHP和JavaScript。这是Disipe™的食谱,因为您必须考虑两种不同交织语言的执行。虽然看起来它很有效,但它会变得很乱 fast 。
相反,将逻辑分开一点,并控制周围的变量:
<?php // Preprocess some data ?>
var something = <?php echo JSON_encode(some_clearly_defined_data); ?>
do_something_with_the_data();
即:
<?php
classesForCountries = [];
while (have_posts()) {
classesForCountries[ post.country ] += post.className + ' ';
}
?>
// Now this should look something like {"Australia": "2006 2010 "}
var classNameMap = <?php echo JSON_encode(classesForCountries); ?>;
geojson = L.geoJson(statesData, {
style: function(feature) {
// Now the logic is a simple hashmap look-up
var classes = classNameMap[feature.properties.sovereignt];
if (classes) {
return {className: classes};
}
},
}).addTo(map);
看起来不干净吗?虽然您可以将PHP和JS混合在一起,但您应该保持代码人类可读并且易于理解。创建可以检查的变量和状态。制作未来自己想要阅读的代码。