WordPress:将自定义的类别管理器添加到* PAGE *编辑器

时间:2010-03-26 16:09:26

标签: php wordpress

在WordPress中,帖子编辑器包含一个“类别”面板,允许您为帖子指定类别。但是,页面编辑器没有“类别”面板。我确信这是设计的,但我需要一组经过修改的类别项目才能用于页面。

我发现我可以将下面的代码行添加到我的主题的functions.php文件中,以便将缺少的类别选择器添加到页面编辑器中...

add_action('admin_menu', 'my_post_categories_meta_box');
function my_post_categories_meta_box() {
    add_meta_box('categorydiv', __('Categories'), 'post_categories_meta_box', 'page', 'side', 'core');
}

但是,我想指定应该出现在此菜单中的类别。我不希望它列出所有可用的类别,只列出我选择包含的类别。这可能吗?

如果没有,我如何添加一个基本上做同样事情的小部件(提供一个带有复选框的项目列表)?

2 个答案:

答案 0 :(得分:1)

最好的方法是在编辑器窗口中创建自己的元框,然后过滤掉类别或定义要手动显示的类别。

要获得一个类别数组是简单的使用wordpress'get_categories函数来获取一个类别数组,然后如果你想从选项中删除一些,那么只需unset来自该数组。< / p>

这是我在我的functions.php中的简短摘录,基本上这与我自己的php文件相关联,该文件包含用于选择类别的代码,然后保存它。

首先介绍如何制作自定义编辑部分。

add_action('admin_menu', 'custom_admin');
/* Adds a custom section to the "side" of the post edit screen */
function custom_admin() {
     add_meta_box('category_selector', 'Settings', 'category_custom_box', 'post', 'side', 'low');

/* prints the custom field in the new custom post section */
function category_custom_box() {
    //get post meta values

    global $post;
    //$currentCat gets the pages current category id
    $currentCat = wp_get_post_categories($post->ID);

    //Do your printing of the form here.
}

然后保存类别创建一个新函数并将其添加到'save_post'钩子。

/* when the post is saved, save the custom data */
function save_postdata($post_id) {
        // verify this with nonce because save_post can be triggered at other times
        if (!wp_verify_nonce($_POST['customCategory_noncename'], 'customCategory')) return $post_id;

        // do not save if this is an auto save routine
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;

        //get the category and set it
        $custom_category = $_POST['custom_category'];
        wp_set_post_categories($post_id, array($custom_category));

 ...
 }

nonce值只是一个随机生成的字符串,用于检查会话是否有效,避免并发,只需将其添加到表单中,

<input type="hidden" name="customCategory_noncename" id="customCategory_noncename" value="<?= wp_create_nonce('customCategory'); ?>" />

对于代码量感到抱歉,我试图尽量减少代码量。

希望这会有所帮助:)

答案 1 :(得分:0)

您是如何实际为页面分配类别的? Wordpress本身不支持页面类别。可能有效的旧插件:http://www.megaupload.com/?d=CLBDY6U0