wordpress发布文章右侧分类面板
方法一:
// wordpress发布文章右侧分类面板
function my_add_category_metabox() {
add_meta_box(
'my_category_metabox', // 唯一标识
'文章分类', // 标题
'my_category_metabox_callback', // 回调函数
'post', // 屏幕
'side', // 区域
'high' // 优先级
);
}
function my_category_metabox_callback($post) {
// 获取所有分类
$post_categories = wp_get_post_terms($post->ID, 'category', array('fields' => 'ids'));
$args = array(
'taxonomy' => 'category',
'selected_cats' => $post_categories,
'popular_cats' => false,
'walker' => null,
'checked_ontop' => false,
'number' => null,
'echo' => 1,
'class' => 'categorychecklist form-no-clear',
'hierarchical' => 0, // 显示为平面列表,而非树状结构
'id' => 'my_category_checklist',
);
// 调用wp_terms_checklist,但请注意,这实际上是复选框列表
wp_terms_checklist($post->ID, $args);
// 注意:如果您真的需要一个下拉框样式的多选,您可能需要使用JavaScript或jQuery来创建自定义的UI组件。
// 下面的代码是一个简化的示例,说明如何可能通过JavaScript实现这一点,但这不是WordPress内置的功能。
// <script type="text/javascript">
// // 这里可以添加JavaScript代码来将复选框列表转换为下拉框样式的多选组件
// </script>
}
// 确保在正确的钩子上调用此函数
if (is_admin() && !empty($_GET['post']) && get_post_type($_GET['post']) == 'post') {
add_action('add_meta_boxes', 'my_add_category_metabox');
}
方法一修改后:
/*
Plugin Name: Custom Post Category Metabox
Description: Adds a custom category metabox to the post editor.
Version: 1.0
Author: Your Name
*/
function custom_add_category_metabox() {
add_meta_box(
'custom_category_metabox', // 唯一标识
'文章分类', // 标题
'custom_category_metabox_callback', // 回调函数
'post', // 屏幕
'side', // 区域
'high' // 优先级
);
}
add_action('add_meta_boxes', 'custom_add_category_metabox');
function custom_category_metabox_callback($post) {
// 获取当前文章的分类 ID 数组
$post_categories = wp_get_post_terms($post->ID, 'category', array('fields' => 'ids'));
$args = array(
'taxonomy' => 'category',
'selected_cats' => $post_categories,
'popular_cats' => false,
'walker' => null,
'checked_ontop' => false,
'number' => null,
'echo' => false, // 不直接输出,便于后续处理
'class' => 'categorychecklist form-no-clear',
'hierarchical' => 0, // 显示为平面列表,而非树状结构
'id' => 'custom_category_checklist',
);
$checklist_html = wp_terms_checklist($post->ID, $args);
// 输出 HTML
echo $checklist_html;
}