如何将meta box添加到后端菜单页面

时间:2011-10-05 作者:Giraldi

我需要添加一个meta boxbackend menu page, 在外观菜单中(/wp-admin/nav-menus.php), 列出所有可用的post types, 默认值和;定制的。

它将包含一个列表,其中包含指向archive pages only 要添加到nav菜单的各个立柱类型。这可能吗?

3 个回复
SO网友:Tom J Nowell

以下是显示在导航菜单界面左侧最上方的元框示例:

/**
 * Instantiates the class
 */
add_action( \'admin_init\', array( \'call_someClass\', \'init\' ) );

/**
 * The Class
 */
class call_someClass {
    const LANG = \'exch_lang\';

    public static function init() {
    $class = __CLASS__;
    new $class;
    }

    public function __construct() {
    // Abort if not on the nav-menus.php admin UI page - avoid adding elsewhere
    global $pagenow;
    if ( \'nav-menus.php\' !== $pagenow )
                    return;

        $this->add_some_meta_box();
    }

    /**
     * Adds the meta box container
     */
    public function add_some_meta_box(){
        add_meta_box(
            \'info_meta_box_\'
            ,__( \'Example metabox\', self::LANG )
            ,array( $this, \'render_meta_box_content\' )
            ,\'nav-menus\' // important !!!
            ,\'side\' // important, only side seems to work!!!
            ,\'high\'
        );
    }

    /**
     * Render Meta Box content
     */
    public function render_meta_box_content() {
        echo \'<p>Example text</p>\';
    }
}
add\\u meta\\u box的重要部分是:

            ,\'nav-menus\' // important !!!
            ,\'side\' // important, only side seems to work!!!
有一个nav menu post类型,但它不支持元盒和nav菜单。php硬编码为使用“nav menus”和“side”值。只要你尊重这一点,你就可以在合理的范围内做任何你喜欢的事情。

遗憾的是,在撰写本文时,无法向单个菜单项本身添加额外字段,例如链接、页面等,因为这些字段是硬编码的。您可以通过jQuery添加它们,然后在需要时通过后端的挂钩保存它们。

SO网友:kaiser

由于@TomJNowell已经回答了元框,我只向您展示如何获取帖子类型列表:

/**
 * Builds a html form element list depending on the param type
 * 
 * @param string $type | form element type; Valid: select/checkbox/radio
 * @param bool $echo | (optional) print or return
 * @return string $html
 */
public function get_post_types_list( $type, $echo = false )
{
    $name = \' name="nav-menu-post-types\';
    $html = ! in_array( $type, array( \'checkbox\', \'radio\' ) ? "<{$type}{$name}\'>" : \'\';
    foreach( array_keys( $GLOBALS[\'wp_post_types\'] ) as $pt )
        $html .= \'select\' === $type ? "<option>{$pt}</option>" : "<input type=\'{$type}\' {$name}[]\' value=\'{pt}\' />";
    $html .= ! in_array( $type, array( \'checkbox\', \'radio\' ) ? "</{$type}>" : \'\';

    if ( $echo ) 
        return print $type;
    return $type;
}
它没有经过测试,但应该可以工作

SO网友:mor7ifer

@kaiser解决方案的替代方案是get_post_types() 作用它应该允许您更好地控制帖子类型。

结束

相关推荐

是否在自定义帖子类型的“主页”屏幕中包含Metabox?如果不是,那么仪表板页面?

我有一个简单的YouTube嵌入页面。我希望客户端能够轻松地从仪表板切换视频id,而无需编辑任何模板。类似这样:<iframe width=\"576\" height=\"324\" src=\"http://www.youtube.com/embed/<?=$video_id ?>\"></iframe>因此,我试图在各自自定义帖子类型的主页中插入一个元框(见下文),但不确定如何进行。这样的事情可能吗?如果没有,是否有办法将元盒插入WordPress仪表板的“主页”