Plugin throwing TypeError after WordPress 4.5 update
I was able to resolve the issue. Turns out I was using an older version of JS composer. Updating to the newest version broke my site so I tracked down the error and updated the html2element
function to
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() },
All is working well for me again! Hope this helps others.
I was still getting this error after trying the patch in Ben's answer: Uncaught TypeError: Cannot read property 'custom' of undefined
So I modified the html2element in composer-view.js as follows:
html2element: function(html) { var $template, attributes = {}, template = html; $template = $(template(this.model.toJSON()).trim()); if($template.get(0)) { _.each($template.get(0).attributes, function(attr) { attributes[attr.name] = attr.value })}; this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent() },
@Ben This works perfect!
Cause: Admin was not loading the correct visual editor for js_composer plugin after updatethis plugins.
=====================================================
Error:
Error: TypeError: $template.get is not a functionSource File: wp-content/plugins/js_composer_salient/assets/js/dist/backend.min.js?ver=4.10Line: 4047
=====================================================
SolutionGoto file /wp-content/plugins/js_composer_salient/assets/js/dist/backend.min.js around line 4045:
======> Replace the code =====================================================
html2element: function(html) { var $template, attributes = {}; _.isString(html) ? (this.template = _.template(html), $template = $(this.template(this.model.toJSON(), vc.templateOptions["default"]).trim())) : (this.template = html, $template = html), _.each($template.get(0).attributes, function(attr) { attributes[attr.name] = attr.value }), this.$el.attr(attributes).html($template.html()), this.setContent(), this.renderContent() },
======> Replace with this code ========================================
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() },