Неперехваченная ошибка типа: Не удается прочитать свойства null (чтение «длины») в пользовательском элементе WPBakery

#javascript #php #wordpress #shortcode #wpbakery

Вопрос:

Я пытаюсь создать пользовательский элемент WPBakery, и он работает неправильно. Элемент поможет мне отобразить список с заголовком для списка, изображением, а также добавит пользовательский значок или изображение на каждый элемент. Все отображается просто отлично, за исключением тех случаев, когда я пытаюсь сохранить элемент.

Я получаю в консоли отладки следующую ошибку:

Неперехваченная ошибка типа: Не удается прочитать свойства null (чтение «длина»)

Код элемента выглядит следующим образом:

 <?php
if (!defined('ABSPATH')) {
    die('-1');
}

if (!class_exists('Azirspares_Shortcode_Listing')) {
    class Azirspares_Shortcode_Listing extends Azirspares_Shortcode
    {
        /**
         * Shortcode name.
         *
         * @var  string
         */
        public $shortcode = 'listing';

        public function output_html($atts, $content = null)
        {
            $atts = function_exists('vc_map_get_attributes') ? vc_map_get_attributes('azirspares_listing', $atts) : $atts;
            extract($atts);
            $css_class = array('azirspares-listing');
            $css_class[] = $atts['style'];
            $css_class[] = $atts['type_color'];
            $css_class[] = $atts['type_border'];
            $css_class[] = $atts['el_class'];
            $class_editor = isset($atts['css']) ? vc_shortcode_custom_css_class($atts['css'], ' ') : '';
            $css_class[] = apply_filters(VC_SHORTCODE_CUSTOM_CSS_FILTER_TAG, $class_editor, 'azirspares_listing', $atts);
            $listing_link = vc_build_link($atts['link']);
            if ($listing_link['url']) {
                $link_url = $listing_link['url'];
            } else {
                $link_url = '#';
            }
            if ($listing_link['target']) {
                $link_target = $listing_link['target'];
            } else {
                $link_target = '_self';
            }
            $listing_item = (array)vc_param_group_parse_atts($atts['listing_item']);
            /* START */
            ob_start(); ?>
            <div class="<?php echo esc_attr(implode(' ', $css_class)); ?>">
                <div class="listing-inner">
                    <div class="listing-thumb">
                        <?php if ($atts['banner'] amp;amp; ($atts['style'] == 'default' || $atts['style'] == 'style3')): ?>
                            <figure>
                                <?php
                                $image_gallery = apply_filters('azirspares_resize_image', $atts['banner'], 315, 168, true, true);
                                echo wp_specialchars_decode($image_gallery['img']);
                                ?>
                            </figure>
                        <?php endif; ?>
                        <?php if ($atts['title']): ?>
                            <?php if ($atts['style'] == 'default' || $atts['style'] == 'style3'): ?>
                                <h4 class="cat-name">
                                    <a target="<?php echo esc_attr($link_target); ?>"
                                       href="<?php echo esc_url($link_url); ?>">
                                        <?php echo esc_html($atts['title']); ?>
                                    </a>
                                </h4>
                            <?php elseif($atts['style'] == 'style1'): ?>
                                <h4 class="cat-name">
                                    <?php echo esc_html($atts['title']); ?>
                                </h4>
                            <?php endif; ?>
                        <?php endif; ?>
                        <?php if ($listing_link['title'] amp;amp; $atts['style'] == 'default'): ?>
                            <a class="button" target="<?php echo esc_attr($link_target); ?>"
                               href="<?php echo esc_url($link_url); ?>"><?php echo esc_html($listing_link['title']); ?></a>
                        <?php endif; ?>
                    </div>
                    <?php if (!empty($listing_item)):
                        $clear = '';
                        $classes = array();
                        if ($atts['style'] == 'style2'):
                            $clear = 'row auto-clear';
                            $classes[] = 'rows-space-30';
                            $classes[] = 'col-bg-15';
                            $classes[] = 'col-lg-15';
                            $classes[] = 'col-md-3';
                            $classes[] = 'col-sm-4';
                            $classes[] = 'col-xs-6';
                            $classes[] = 'col-ts-12';
                        endif; ?>
                        <ul class="listing-list equal-elem <?php echo esc_attr($clear); ?>">
                            <?php foreach ($listing_item as $item): ?>
                                <?php
                                $icon = $item['icon_' . $item['type']];
                                vc_icon_element_fonts_enqueue($item['type']);
                                ?>
                                <?php if ($item['title_item'] != ''): ?>
                                    <li class="<?php echo esc_attr(implode(' ', $classes)); ?>">
                                        <?php if (array_key_exists('link_item', $item)):
                                            $item_link = vc_build_link($item['link_item']);
                                            if ($item_link['target'] == '') {
                                                $item_link['target'] = '_self';
                                            }
                                            if ($item_link['url'] != ''): ?>
                                                <a href="<?php echo esc_url($item_link['url']) ?>"
                                                   target="<?php echo esc_attr($item_link['target']) ?>">
                                                    <?php if ($item['upload'] == 'icon'): ?>
                                                        <span class="icon"><span class="<?php echo esc_attr($icon) ?>"></span></span>
                                                    <?php elseif ($item['upload'] == 'image' amp;amp; isset($item['image'])): ?>
                                                        <span class="image"><?php echo wp_get_attachment_image($item['image'], 'full'); ?></span>
                                                    <?php endif; ?>
                                                    <?php echo esc_html($item['title_item']); ?>
                                                </a>
                                            <?php else: ?>
                                                <?php echo esc_html($item['title_item']); ?>
                                            <?php endif; ?>
                                        <?php else: ?>
                                            <?php echo esc_html($item['title_item']); ?>
                                        <?php endif; ?>
                                    </li>
                                <?php endif; ?>
                            <?php endforeach; ?>
                        </ul>
                    <?php endif; ?>
                    <?php if ($listing_link['title'] amp;amp; $atts['style'] == 'style2'): ?>
                        <a class="button" target="<?php echo esc_attr($link_target); ?>"
                           href="<?php echo esc_url($link_url); ?>"><?php echo esc_html($listing_link['title']); ?></a>
                    <?php endif; ?>
                </div>
            </div>
            <?php
            wp_reset_postdata();
            $html = ob_get_clean();

            return apply_filters('Azirspares_Shortcode_Listing', $html, $atts, $content);
        }
    }

    new Azirspares_Shortcode_Listing();
}
 

Комментарии:

1. Ошибки обычно сопровождаются номерами строк, и было бы полезно знать, где в этом коде сообщается об ошибке, вместо того, чтобы искать