WordPress 4.5 업데이트 후 TypeError 플러그인 던지기
WordPress를 4.5로 업데이트한 후 고장난 비주얼 컴포저 플러그인을 디버깅하고 있는데 왜 TypeError가 발생하는지 알 수 없습니다.
콘솔에 표시되는 오류 메시지:
JQMIGRATE: Migrate is installed, version 1.4.0 load-scripts.php?....
Uncaught TypeError: $template.get is not a function composer-view.js?ver=4.1.1.1:73
의 유일한 발생은$template
아래 코드에 있습니다.이것은 그다지 이해하기 어려운 내용입니다만, 어떻게 하면 이 에러를 해결할 수 있을까요?
/**
* Convert html into correct element
* @param html
*/
html2element: function(html) {
var attributes = {},
$template;
if (_.isString(html)) {
this.template = _.template(html);
$template = $(this.template(this.model.toJSON()).trim());
} else {
this.template = html;
$template = html;
}
_.each($template.get(0).attributes, function(attr) { // **errors on this line**
attributes[attr.name] = attr.value;
});
this.$el.attr(attributes).html($template.html());
this.setContent();
this.renderContent();
},
업데이트:
jQuery에 문제가 있을 수 있습니다.WordPress 4.5에는 jQuery 1.12가 포함되어 있어 잘못된 구문을 사용하여 특정 코드를 실행할 수 있는 버그를 수정했습니다.플러그인 코드의 구문이 잘못되어 있는 것이 틀림없지만, 지금까지도 동작하고 있다고 생각합니다.
https://wordpress.org/support/topic/read-this-first-wordpress-45-master-list#post-8271654
나는 그 문제를 해결할 수 있었다.알고 보니 JS 작곡가의 이전 버전을 사용하고 있었습니다.최신 버전으로 업데이트하면 사이트가 망가져서 오류를 추적하고 업데이트했습니다.html2element
기능하다
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()
},
Ben의 답변에서 패치를 사용해 본 후에도 여전히 이 오류가 발생하고 있습니다.Uncaughed TypeError: 정의되지 않은 속성 'custom'을 읽을 수 없습니다.
그래서 composer-view.js의 html2element를 다음과 같이 수정했습니다.
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 이건 완벽해!
원인: 관리자가 플러그인 업데이트 후 js_composer 플러그인의 올바른 비주얼 에디터를 로드하지 않았습니다.
=====================================================
오류:
오류: $typeError: $type.get은 함수가 아닙니다.소스 파일: wp-content/plugins/filen_syslog/syslog/dist/min.syslog?ver=4.10 행: 4047
=====================================================
솔루션 Goto 파일 /wp-content/plugins/js_composer_salient/assets/js/dist/backend.min.js 행 주변:
======> 코드 교체 =====================================================
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()
},
======> 이 코드로 대체 ========================================
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()
},
코드가 html2element 함수에 전달되지 않았지만 그것을 호출하는 함수(렌더)에 존재함을 알게 되었습니다.
다음 코드로 문제가 완전히 해결되었습니다.페이지 로드, 추가, 복제, 삭제 등이 가능합니다.
render: function () {
var $shortcode_template_el = $( '#vc_shortcode-template-' + this.model.get( 'shortcode' ) );
if ( $shortcode_template_el.is( 'script' ) ) {
var newHtmlCode = _.template( $shortcode_template_el.html(),
this.model.toJSON(),
vc.templateOptions.default );
if(!_.isString(newHtmlCode)){
newHtmlCode = $shortcode_template_el.html();
}
this.html2element( newHtmlCode );
} else {
var params = this.model.get( 'params' );
$.ajax( {
type: 'POST',
url: window.ajaxurl,
data: {
action: 'wpb_get_element_backend_html',
data_element: this.model.get( 'shortcode' ),
data_width: _.isUndefined( params.width ) ? '1/1' : params.width,
_vcnonce: window.vcAdminNonce
},
dataType: 'html',
context: this
} ).done( function ( html ) {
this.html2element( html );
} );
}
this.model.view = this;
this.$controls_buttons = this.$el.find( '.vc_controls > :first' );
return this;
},
Applay (2.1.3, 조금 구식)라는 테마를 사용하고 있습니다.WP와 모든 플러그인을 최신 버전(4.5.2)으로 업데이트하여 이 문제를 해결했습니다.이 컴포넌트(js_composer)의 플로우를 분석하지 않고, 이 「부러진」함수(실제로 파손된 것은 아닙니다)만을 분석했습니다.이 . template 와 $ template 가 잘못된 오브젝트 타입을 취득하고 있는 것을 알았습니다(다른 검증이 필요)._.isString(html)
block을 try&catch block은 다음과
원래의
html2element:function (html) {
var attributes = {},
$template;
if (_.isString(html)) {
this.template = _.template(html);
$template = $(this.template(this.model.toJSON()).trim());
} else {
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();
},
수정된
html2element:function (html) {
var attributes = {},
$template;
if (_.isString(html)) {
this.template = _.template(html);
} else {
try {
this.template = _.template(html());
} catch (err) {
this.template = html;
}
}
$template = $(this.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();
},
나는 아스트라 테마를 사용하고 있다.이 수정은 99.9% 동작하고 있습니다.일부의 경우, 이것은 회전 휠을 정지시킬 뿐이지만, 일단 페이지가 로드되면 정지하지 않습니다.
이 코드에 약간의 변경을 가했습니다(지금까지 어디에나 게시되어 있습니다).
오리지널 Astra 테마 코드는 이쪽(composer-view.js)
html2element:function (html) {
var attributes = {},
$template;
if (_.isString(html)) {
this.template = _.template(html);
$template = $(this.template(this.model.toJSON()).trim());
} else {
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();
},
동작하는 코드:
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()
},
주요 차이점은 여기에 있습니다(원래 코드와 비교).
}); this.$el.attr
원래 쉼표 대신 세미콜론이 있습니다. : ):
}), this.$el.attr
여러분 건배 :)그러니까
이 사이트에서 해결책을 찾았습니다.https://wordpress.org/support/topic/visual-composer-is-not-working
first: html2packs 편집:.../wp-content/plugins/syslog_syslog/syslog/syslog-view.syslogs.syslogs에 있습니다.
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()},
두 번째: 단, 프런트 엔드 에디터를 열면 custom_views.js:101 및 다른 파일의 467 행에 이 "trim" 문제가 발생합니다.이름을 잊어버렸습니다만, frontend_editor.js인 것 같습니다.
편집처: \wp-content\plugins\syslog\syslog\syslog\frontend_syslog\
- 프런트 엔드_prontend.syslog
- custom_discl.discloss.custom
불량 코드:
this.$controls = $( _.template( template, data, _.extend( {},
vc.template_options,
{ evaluate: /\{#([\s\S]+?)#}/g } ) ).trim() ).addClass( 'vc_controls' );
고정 코드:
this.$controls = $( _.template( template, data, _.extend( {},
vc.template_options,
{ evaluate: /\{#([\s\S]+?)#}/g } ) )().trim() ).addClass( 'vc_controls' );
세 번째: 흑마법을 보세요.
건배.
$template.get은 함수가 아니며 Uncaught TypeError: 정의되지 않은 속성 '속성'을 읽을 수 없습니다.나한테는 통했어
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()
}
WP 4.8.1(PHP7)에서 동작하는 변경을 실시했습니다.
파일 wp-content/plugins/syslogs/syslogs/syslogs/syslogs-view.syslogs로 지정합니다.
렌더 메서드를 변경해야 합니다.
이 행을 바꿉니다.
this.html2element(_.template($shortcode_template_el.html(), this.model.toJSON()));
이 선으로
this.html2element( $shortcode_template_el.html() );
_.template() 함수는 완벽하게 동작하지 않고 좋은 오브젝트를 반환하지 않는 것 같으므로 대신 html 코드를 지정하는 것이 좋습니다.
테마를 업데이트해 보십시오.Goto 외관 >주제 및 업데이트를 확인합니다.업데이트 시 자동으로 문제가 해결되었습니다.
Nimva 테마를 실행하고 있는 나를 위해 WP 4.5로 업데이트하면 오류가 발생합니다.자동 업데이트가 가능한 Nimva 2.02로 업데이트해야 합니다.
언급URL : https://stackoverflow.com/questions/36605420/plugin-throwing-typeerror-after-wordpress-4-5-update
'programing' 카테고리의 다른 글
이름이 '[DEFAULT]'인 Firebase 앱이 이미 있습니다(app/duplicate-app). (0) | 2023.03.21 |
---|---|
Kotlin & Spring Boot @Configuration Properties (0) | 2023.03.21 |
오른쪽 다이내믹 콘텐츠를 포함한 100% 높이 좌측 사이드바 - 부트스트랩 + Wordpress (0) | 2023.03.21 |
C#에서 POST를 통해 JSON을 발송하고 반환된 JSON을 수령하시겠습니까? (0) | 2023.03.21 |
Create-React-App 어플리케이션의 index.html과 index.js 사이의 접속처는 어디입니까? (0) | 2023.03.16 |