Показать диалоговое окно в плагине TinyMCE и использовать в нем функции WordPress php

Я добавляю кнопку TinyMCE в свой плагин. До сих пор мне удалось добавить кнопку и вызвать файл editor_plugin.js, и это команда. Нелегкая миссия …

Я хочу, чтобы эта кнопка отображала диалоговое окно, которое дает пользователю несколько опций. Это раскрывающиеся окна, которые мне нужно заполнить, и некоторые текстовые поля для пользователя, чтобы просто написать ввод. Некоторые из них нуждаются в информации из функций WordPress, а другие – только статическая информация.

После того, как это диалоговое окно будет принято, я хочу, чтобы он написал короткий код в сообщении для моего плагина для отображения с параметрами, выбранными в поле.

Дело в том, что я хочу использовать некоторые из функций WordPress в моем php-файле. Но это своего рода «вне контекста». Я не могу использовать функции WordPress или даже функции __() для i18n.

Вот код, который я использую из одного из примеров TinyMCE:

 ed.addCommand('mceExample', function() { ed.windowManager.open({ file : url + '/box.php', width : 500 + ed.getLang('example.delta_width', 0), height : 300 + ed.getLang('example.delta_height', 0), inline : 1 }, { plugin_url : url, // Plugin absolute URL some_custom_arg : 'custom arg' // Custom argument }); }); 

Я также пропускаю способ писать на почту. Как вы можете видеть здесь, этот код не использует ничего для записи в сообщение. Я попытался использовать этот код, который я нашел в другом примере: ed.execCommand('mceInsertContent', false, 'Hello World'); но не выяснили, как использовать его в моем новом скрипте.

Извините, если раньше был дан ответ, но вся документация, касающаяся швов TinyMCE, довольно запутанна, и мне было трудно интегрировать это в мои плагины. Заранее спасибо.

Solutions Collecting From Web of "Показать диалоговое окно в плагине TinyMCE и использовать в нем функции WordPress php"

Вместо того, чтобы требовать admin.php, вы просто можете использовать WP встроенную функцию ajax, даже если это не ajax в этом случае.

Добавить крючок

  add_action('wp_ajax_my_plugin_function', 'my_plugin_function_callback'); 

Создайте свою функцию вывода (обратный вызов)

 function my_plugin_function_callback() { // do stuff } 

Назовите это так

вместо:

 file : url + '/box.php', 

вы должны иметь возможность использовать глобальный ajaxurl:

 file: ajaxurl + '?action=my_plugin_function&optional=data ... 

Возможно, добавьте nonce по соображениям безопасности, но это зависит от вас 🙂

[править: пропущенная часть вопроса]

Не могу поклясться, что это лучшая практика, но решение, которое я видел, это включить «wp-admin / admin.php», который должен предоставить вам доступ к любым / всем функциям WordPress.

Попасть в это – проблема, учитывая, что ваш плагин можно переименовать / переместить. Это [хакерское] решение предполагает, что плагин все еще находится в каталоге «wp-content». Вы захотите разместить этот код в верхней части вашего файла box.php.

 $admin = dirname( __FILE__ ) ; $admin = substr( $admin , 0 , strpos( $admin , "wp-content" ) ) ; require_once( $admin . 'wp-admin/admin.php' ) ; 

Если есть лучший способ сделать это, я бы тоже хотел увидеть это – это кажется халатным.

Что касается размещения вашего содержимого в редакторе, вам нужно будет добавить файл «tiny_mce_popup.js» в ваш диалог. Поместите это в начало файла box.php.

 <script type="text/javascript" src="<?php echo get_option( 'siteurl' ) ?>/wp-includes/js/tinymce/tiny_mce_popup.js"></script> 

В диалоговом окне должен быть какой-то метод javascript, который запускается, когда пользователь нажимает OK. В этом методе вы будете использовать execCommand, например:

 <script type="text/javascript"> function myOnSubmitFunction( ){ tinyMCEPopup.editor.execCommand('mceInsertContent', false, 'Put your content here...' ) ; } </script> 

Надеюсь, я сделал это немного более ясно.