web-dev-qa-db-ja.com

WordPress 4.5アップデート後にTypeErrorをスローするプラグイン

composerを4.5に更新した後に壊れたビジュアルWordPressプラグインをデバッグしていますが、なぜ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

50
spencer.sm

私は問題を解決することができました。古いバージョンの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()
        },

すべてが再び私のためにうまく機能しています!これが他の人の役に立つことを願っています。

121
Ben

ベンの答えでパッチを試した後、私はまだこのエラーを受け取っていました:ncaught TypeError:Undefinedのプロパティ '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()
    },
33
ECC-Dan

@Benこれは完璧に動作します!

原因:このプラグインを更新した後、管理者はjs_composerプラグインの正しいビジュアルエディターをロードしていませんでした。

================================================== ===

エラー:

エラー:TypeError:$ template.getは関数ではありませんソースファイル:wp-content/plugins/js_composer_salient/assets/js/dist/backend.min.js?ver = 4.10行:4047

================================================== ===

ソリューション行4045の前後のファイル/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()
    },
18
Didierh

コードは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;
                },
5
Amritosh pandey

テーマApplay(2.1.3、少し時代遅れ)を使用しています。 WPおよびすべてのプラグインを最新バージョン(4.5.2)に更新したばかりで、この問題も発生しました。このコンポーネント(js_composer)のフローは分析しませんでした。この「壊れた」関数だけを分析しました(実際には壊れていません)。 this.templateと$ templateが間違ったオブジェクト型を取得していることに気付きました(_.isString(html)以外に別の検証が必要です)。次のようにtry&catchブロックを追加して解決しました。

オリジナル

    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();
    },
4

Astraテーマを使用しています。この修正は、99.9%動作しています。いくつかのトーでは、これはスピニングホイールを停止するだけですが、ページが視覚的に読み込まれるとcomposerは停止しません。

私はこのコードにわずかな変更を加えました(今ではどこにでも投稿されています)

オリジナルの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

乾杯の人々:)だから

3
Renegade_Mtl

WP 4.8.1(PHP7)で機能するこの変更を行いました

ファイル内wp-content/plugins/js_composer/assets/js/backend/composer-view.js

renderメソッドを変更する必要があります:

この行を置き換えます

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

この行で

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

_.template()関数は完全に機能せず、適切なオブジェクトを返さないため、代わりにhtmlコードを指定した方がよいようです。

1
sly63

$ 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()
}
1
Amit Garg

さて、私はこのサイトで解決策を見つけました: https://wordpress.org/support/topic/visual-composer-is-not-working

最初:/wp-content/plugins/js_composer/assets/js/backend/composer-view.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()},

2番目:ただし、フロントエンドエディターを開くと、custom_views.js:101でこの「トリム」の問題が発生し、別のファイルの467行目が発生します。名前を忘れましたが、frontend_editor.jsかもしれません。

編集:\ wp-content\plugins\js_composer\assets\js\frontend_editor \

  • frontend_editor.js
  • custom_views.js

悪いコード:

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' );

第三:黒魔術を参照してください。

乾杯。

1
Sebastian Diaz

テーマを更新してみてください。 「外観」>「テーマ」に移動し、更新を確認します。これにより、更新時に自動的に問題が解決されました。

Nimvaテーマを実行するためにWP 4.5に更新すると、エラーが発生します。 Nimvaの2.02に更新する必要があります。これにより、自動更新が可能になります。

0
Robert Spencer