在TinyMCE快捷码页面上使用虹膜拾色器

时间:2014-01-08 作者:simultsop

我实际上正在开发一个小的短代码插件。

在插件主文件上,我注册TinyMCE按钮并链接core js about按钮:

add_filter("mce_external_plugins", "shortcodes_tinymce_plugin");
add_filter("mce_buttons", "register_shortcodes_button");

function register_shortcodes_button($buttons) {
    array_push($buttons, "separator", "shortcodes");
    return $buttons;
}

function shortcodes_tinymce_plugin($plugin_array) {
    $plugin_array[\'shortcodes\'] = PLUGINDIR_URI . \'tiny_mce_script.js\';
    return $plugin_array;
}
其中包含以下代码:

(function() {  

 tinymce.create(\'tinymce.plugins.shortcodes\', {

    init : function(ed, url) {              

        ed.addButton(\'shortcodes\', {  
            title : \'Utilizer shortcodes\',  
            image : url.replace(\'/js\',\'\')+\'/img/shortcodes.png\',  
            cmd : \'shortcodes\',
            pluginurl : ajaxurl                
        });

        ed.addCommand(\'shortcodes\', function() {
            ed.windowManager.open({
                file : url.replace(\'/js\',\'\')+\'../../tinymce_shortcode.php\',
                width : 510 + parseInt(ed.getLang(\'button.delta_width\', 0)),
                height : 415 + parseInt(ed.getLang(\'button.delta_height\', 0)),
                inline : 1
            }, {
                plugin_url : url
            });
        });

    }

 });

 tinymce.PluginManager.add(\'shortcodes\', tinymce.plugins.shortcodes);
 }
)();
单击按钮时,模式页面将加载此文件tinymce\\u短代码。PHP在文档顶部包含以下内容:

<?php 

require_once("../../../../wp-load.php"); 

if ( !current_user_can(\'publish_posts\') ) exit();

wp_register_script( \'shortcodes\',   PLUGINDIR_URI . "shortcodes.js", false, "1.0", true );   
wp_register_script( \'tiny-mce-popup\',   PLUGINDIR_URI . "tiny_mce_popup.js", false, "1.0", true );   

wp_enqueue_script( 
    array( 
        \'iris\', 
        \'json2\', 
        \'jquery\', 
        \'jquery-ui-core\', 
        \'jquery-ui-sortable\',
        \'jquery-ui-tabs\',
        \'jquery-ui-slider\',
        \'jquery-ui-datepicker\',
        \'jquery-ui-autocomplete\',
        \'tiny-mce-popup\',
        \'shortcodes\',
        \'media-upload\', 
        \'thickbox\',
    )  
); ?>
然后在身体关闭前的右下角,我执行以下代码:

<?php do_action(\'admin_print_scripts\'); ?>
<?php do_action(\'admin_print_footer_scripts\'); ?>
所有javascript库都会加载,如jquery、jquery ui、media upload、thickbox、jso2等。只有iris颜色选择器库不会加载。非常感谢您的帮助。

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

您的问题可能是JavaScript文件中的以下行:

file : url.replace(\'/js\',\'\')+\'../../tinymce_shortcode.php\'
首先,这样你就脱离了背景。只要在初始化插件时(以及在post.phppost-new.php 请求-请参阅current_screen() 返回值,将其缩小到需要加载插件的请求)。

TinyMCE公司windowManager 不是为了加载PHP文件。它可以加载HTML文件,将所需的标记外包给视图。没什么了。如果需要在服务器端生成标记,只需在函数或方法中构建它,并通过本地化这些值将结果推送到JS文件中(下一段将详细介绍)。然后使用.confirm().open() 取决于您的任务。

接下来,你是replace-ing URI。这使得它高度依赖于实际的文件位置。请记住,插件目录可以移动。其他插件目录可以added next to the original one. 不要那样做。如果您需要JavaScript文件中的相对URL,只需使用wp_localize_script()plugins_url( __FILE__, "your-file.php" )plugin_dir_path( __FILE__ )."your-file.php". 在这种情况下你并不需要这个。

最后的never ever 如果您根本没有在WP之外加载内容,那么就去加载WP上下文之外的内容。简而言之:如果需要加载wp-load.php - 因此,整个WP核心—您正在做一些非常错误的事情。

结束

相关推荐

TinyMCE编辑器删除<p>和<br>,而放入 ;

问题再现步骤:打开WordPress管理面板(我使用3.7版)添加页面</在编辑器上,选择“HTML”选项卡</写入<p>Lorem ipsum dolor sit amet</p><br> 内容区域上</选择“视觉”选项卡</选择“HTML”选项卡返回</代码<p>Lorem ipsum dolor sit amet</p><br> 格式已丢失,显示为:Lorem ipsum dolor sit ame