【问题标题】:Warning: Invalid argument supplied for foreach() Wordpress (UMP)警告:为 foreach() Wordpress (UMP) 提供的参数无效
【发布时间】: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


【解决方案1】:

我找到了解决办法。

if(isset($data['custom_fields']) && is_array($data['custom_fields'])){ //This line of code is missing previously
     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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多