1

ユーザーが保存をクリックするのを忘れた場合に備えて、動的 wp エディターの自動保存を設定しようとしています。(現在、AJAX ボタンで保存するように設定されています。) ユーザーは 0 ~ 20 の個別のエントリを持つことができます。

tinymce の初期化時に追加されるように、wp_editor 設定配列に何か追加する必要があるようです。設定配列は機能しています。メディア ボタンを追加または削除できます。ただし、アクティブなエディターが変更されたときに何かを起動するために、設定に正しいコードを挿入することはできないようです。

これが私が持っているものです。

$editorSettings = 
array ( 'media_buttons' => false,
        'resize' => false,
        'wp_autoresize_on' => true,
        'setup' => "function(ed) {
                      ed.onChange.add(function(ed, l) {
                        console.debug('Editor contents was modified. Contents: ' + l.content);
                      });
                    });" 
  );

このコードでエディタを構築します。

<?php wp_editor( stripslashes($j->journal_entry), 'journal-edit-'.$i , $editorSettings  ); ?>

理想的には、既に記述した AJAX 保存コードを実行するだけです。ただし、変更イベントは発生していないようです。

これはこれを行うための最良の方法ですか、それとも wp_editor 関数の外で何かを作成する必要がありますか? tinymce を手動で起動して変更するためのコードをたくさん見つけることができますが、Wordpress を使用しようとすると見つかりません。

比較する隠しフィールドを設定することを考えましたが、これは悪い方法のようです。ゼロから作成するのではなく、利用できる機能が組み込まれている必要があります。

あなたの助けと提案をありがとう!

4

1 に答える 1

1

したがって、設定配列を介してこれを実行したくないようです。代わりに、フィルタを追加して、このコード pre_init を挿入します。次のコードは、保存ボタンを「クリック」し、wordpress の tinymce からの変更イベントでコンソールに出力します。

セットアップ js 文字列を縮小する必要があります。そうしないと、コンソールにエラーがスローされます。

次のようなものを functions.php ファイルに追加します。注: 関数ファイルでエラーが発生しないように、このコードの一部で ' をエスケープする必要がありました。

function mce_autosave_mod( $init ) {
    $init['setup'] = 'function(a){a.on("change",function(b){jQuery(this).parent().find(\'#btnEditCharJournal\').trigger("click"),console.log("the event object ",b),console.log("the editor object ",a),console.log("the content ",a.getContent())})}';     
    return $init;
}
add_filter('tiny_mce_before_init', 'mce_autosave_mod');

他のあらゆる種類のコードをここに投入できます。これをサイトの特定のエディターに制限するロジックも追加することをお勧めします。エディターのすべてのインスタンスに対してこれを実行する必要はありません。

これをクリーンアップする、またはより良い方法で実行するための提案があれば、私に知らせてください。私はフィルターと wp_editor/tinymce にかなり慣れていません。

于 2016-11-17T04:36:06.850 に答える