【发布时间】:2021-05-15 11:34:28
【问题描述】:
谁能告诉我下面的代码出了什么问题导致警告:为 foreach() 提供的参数无效。我该如何解决?这是来自 Ultimate Membership Pro 插件“shortcode.php”的脚本。
foreach ($data['custom_fields'] as $key => $value) {
if (empty($data['custom_fields'][$key])){
unset($data['custom_fields'][$key]);
}
}
if (!empty($data['levels'])){
$fullPath = IHC_PATH . 'public/views/membership_card.php';
$searchFilename = 'membership_card.php';
$template = apply_filters('ihc_filter_on_load_template', $fullPath, $searchFilename );
wp_enqueue_script( 'ihc-print-this' );
if (!empty($data['metas']['ihc_membership_card_custom_css'])){
$output .=
"<style>".
stripslashes($data['metas']['ihc_membership_card_custom_css'])
."</style>";
}
$output .= ' <script>
var printhisopt = {
importCSS: true,
importStyle: true,
loadCSS:"'.IHC_URL.'assets/css/style.css",
debug: false,
printContainer: true,
pageTitle: "",
removeInline: true,
printDelay: 333,
header: null,
formValues: false,
};
jQuery(document).ready(function(){
jQuery(".fa-print-ihc").on("click", function(e){
var idToPrint = jQuery( e.target ).attr( "data-id-to-print" );
jQuery( "#" + idToPrint ).printThis(printhisopt);
});
});
</script>';
foreach ($data['levels'] as $lid => $level_data){
if (in_array($lid, $exclude_levels)){
continue;
}
ob_start();
include $template;
$output .= ob_get_contents();
ob_end_clean();
}
}else{
$output = '<div class="ihc-additional-message">'. __("No Membership Cards available based on your Subscriptions. SignUp on new Subscriptions or renew the existent one.", 'ihc').'</div>';
}
}
return $output;
这是foreach 循环的数据结构。
array(1) { [2]=> array(12) { ["id"]=> string(1) "3" ["user_id"]=> string(1) "4" ["level_id"]=> string(1) "2" ["start_time"]=> string(19) "2021-05-15 19:05:21" ["update_time"]=> string(19) "2021-06-15 19:05:27" ["expire_time"]=> string(19) "2021-06-15 19:05:21" ["notification"]=> string(1) "0" ["status"]=> string(1) "1" ["label"]=> string(7) "Monthly" ["level_slug"]=> string(7) "monthly" ["badge_image_url"]=> string(0) "" ["is_expired"]=> bool(false) } }
源代码文件:shortcode.php
【问题讨论】:
-
$data['levels'] 的 var_dump 是什么样的?我会在这里添加。
-
对不起。我不确定你指的是哪个区块。
-
我要做的是查看 forEach 循环的数据是什么样的。最简单的方法是把 var_dump($data['levels']);在 if (!empty($data['levels'])){ 之后 - 然后您可以在这篇文章中包含该数据,以便人们可以看到数据结构的样子。
-
感谢您提供的信息。这里是数据结构: array(1) { [2]=> array(12) { ["id"]=> string(1) "3" ["user_id"]=> string(1) "4" [ "level_id"]=> string(1) "2" ["start_time"]=> string(19) "2021-05-15 19:05:21" ["update_time"]=> string(19) "2021- 06-15 19:05:27" ["expire_time"]=> 字符串(19) "2021-06-15 19:05:21" ["通知"]=> 字符串(1) "0" ["状态" ]=> string(1) "1" ["label"]=> string(7) "Monthly" ["level_slug"]=> string(7) "monthly" ["badge_image_url"]=> string(0) " " ["is_expired"]=> bool(false) } }
-
所以你已经在顶层获得了数据,接下来我将在那里分解其他两个变量。我会删除 => $level_data 部分和 var_dump($lid)。数据结构是否与下游所需的相匹配?错误会消失/改变吗?如果是这样,请将 => $level_data 部分放回去并 var_dump 。它符合您的需要吗?
标签: php wordpress wordpress-shortcode