将简短代码添加到TinyMCE以显示菜单下拉列表

时间:2016-02-05 03:23:36

标签: php wordpress

我有一个显示菜单的短代码:

//menu categories shortcode
function menu_categories_shortcode( $atts, $content = null ){
    extract( shortcode_atts( array(
        'menu' => ''
      ), $atts ) );
    ob_start();
        wp_nav_menu(array(
            'menu' => $menu,
            'container'       => 'ul',
            'container_class' => 'sidebar-categories',
            'items_wrap'      => '%3$s',
            'depth' => 1
        ));
    $content = ob_get_contents();
    ob_end_clean();
return $content;
}
add_shortcode('menu-categories', 'menu_categories_shortcode');

现在,我想将菜单短代码的短代码按钮添加到TinyMCE,客户可以选择他们想要显示的菜单。

例如:在主页上,客户希望显示菜单名称为菜单1的菜单,因此短代码将为:[menu-categories menu="Menu 1"] 当客户点击菜单短代码按钮时,会弹出所有菜单的下拉菜单,客户可以选择他们想要的菜单。

Add shortcode button

这是我的js来调用菜单弹出窗口:

(function() {
    tinymce.create('tinymce.plugins.menuPlugin', {
        init: function(ed, url) {
            // Register commands
            ed.addCommand('mcebutton', function() {
                ed.windowManager.open({
                    file: url + '/menu_popup.php',
                    width: 220 + parseInt(ed.getLang('button.delta_width', 0)),
                    height: 240 + parseInt(ed.getLang('button.delta_height', 0)),
                    inline: 1
                }, {
                    plugin_url: url
                });
            });
            // Register buttons
            ed.addButton('menu_button', {
                title: 'Choose Menu',
                cmd: 'mcebutton',
                image: url + '/icon.gif'
            });
        },
    });
    tinymce.PluginManager.add('menu_button', tinymce.plugins.buttonPlugin);
})();

我在menu_popup.php的问题,如何获得所有菜单? 我的menu_popup.php文件:

<form action="/" method="get" accept-charset="utf-8">
    <div>
        <label for="button-url">Choose Menu</label>
        <?php $menus = get_registered_nav_menus();
                    if($menus) : ?>
        <select id="button-url">
            <?php 
                 foreach ($menus as $key => $menu) : ?>
                <option value="<?php echo $menu; ?>"><?php echo $menu; ?></option>          <?php endforeach; ?>
        </select>
        <?php endif; ?>
    </div>
    <div>
        <a href="javascript:ButtonDialog.insert(ButtonDialog.local_ed)" id="insert" style="display: block; line-height: 24px;">Insert</a>
    </div>
</form>

我有错误:

Error

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

menu_poup.php中,您需要包含此代码:

define('WP_USE_THEMES', false);
require('../../../wp-blog-header.php');

available on pypi

访问WordPress功能。我只是尝试使用你的代码,它工作。