programing

WordPress 4.5 업데이트 후 TypeError 플러그인 던지기

showcode 2023. 3. 21. 22:41
반응형

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

반응형