Wordpress更新后的插件错误

时间:2016-05-07 15:55:02

标签: javascript jquery wordpress

我的托管服务提供商自动更新到4.5,导致Visual Composer插件出错。

我读过这些帖子: Plugin throwing TypeError after Wordpress 4.5 update

Visual composer doesn't load and gives TypeError: _.template(...).trim is not a function

Uncaught TypeError: $template.get is not a function

将html2element函数替换为提供的函数。但是,由于很多人对这些帖子发表了评论,我收到了一个新错误:

composer-view.js?ver=4.6.1:139 Uncaught TypeError: Cannot read property 'attributes' of undefined

这是我的功能:

html2element: function(html) {
            var $template, attributes = {},
                template = html;
            $template = $(template(this.model.toJSON()).trim()), _.each($template.get(0).attributes, function(attr) {
                attributes[attr.name] = attr.value
            }), this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent()
        },

错误似乎来自这条线:

$template.get(0).attributes

有没有人想出如何修复它?

感谢您的帮助

2 个答案:

答案 0 :(得分:17)

4.5更新时遇到了同样的问题并尝试了我发现的所有内容,但它仍然无效。

最后,我用最近的一个(4.11.2,google js_composer.zip)替换了我的主题视觉作曲家插件(v4.7的东西)。

我刚刚替换了整个目录内容,它运行正常。

答案 1 :(得分:4)

格雷厄姆,嗨

我认为问题不在于jquery,而是强调在js_composer中使用。

在render方法中将错误的html对象传递给html2element方法,如下所示:

 this.html2element(_.template($shortcode_template_el.html(),
            this.model.toJSON(),
             vc.templateOptions.default));

但是这段代码发送到html2element方法html对象作为没有任何属性或其他东西的函数。这是因为下划线库中的_.template函数在第二个arg没有第一个arg的有效变量之前不会呈现第一个arg(html模板)。

我认为要解决这个问题需要这样做:

this.html2element(_.template($shortcode_template_el.html()));

这2个方法渲染和html2element https://gist.github.com/maximspokoiny/34ad60ad90944f8a80c6fc093873a807/9fb041d2b12249fe4391f986f4e7e6a08f57c6b3#file-gistfile1-txt

我使用js_composer 4.7.4和wordpress 4.5.2来解决这个问题。

谢谢!

<强>更新: 对不起,在html2element中需要进行一次更改,来自:

            if ( _.isString( html ) ) {
            this.template = _.template( html );
            $template = $( this.template( this.model.toJSON(), vc.templateOptions.default ).trim() );
        } else {
            this.template = html;
            $template = html;
        }

为:

            if ( _.isString( html ) ) {
            this.template = _.template( html );
            $template = $( this.template( this.model.toJSON(), vc.templateOptions.default ).trim() );
        } else {
            this.template = html;
            $template = $( this.template( this.model.toJSON(), vc.templateOptions.default ).trim() );
        }