我理解你的担忧;如果你有很多帖子类型,WordPress的管理菜单会很快变得笨拙。我为你所做的就是实现你所要求的东西。它为新的帖子页面创建一个帖子编辑页面元框,其中包含一个自定义帖子类型的下拉列表,如下所示:
下面是下拉模式下一组自定义帖子类型的外观:
它所做的是使用jQuery和Javascript来修改window.location.href
在浏览器的DOM中,使用以下URL模式之一进行选择,以我的屏幕截图列表中的帖子类型为例:
http://example.com/wp-admin/post-new.php // This is for post_type=post
http://example.com/wp-admin/post-new.php?post_type=page
http://example.com/wp-admin/post-new.php?post_type=actor
http://example.com/wp-admin/post-new.php?post_type=movie
http://example.com/wp-admin/post-new.php?post_type=car
http://example.com/wp-admin/post-new.php?post_type=event
http://example.com/wp-admin/post-new.php?post_type=performer
然而,我担心的一件事是它的可用性,因此我编写它是为了在用户修改任何输入字段的值后禁用下拉列表。这样用户就不会意外地丢失他们正在处理的所有内容。
下面是代码,您可以将其放置在主题的functions.php
文件或中的.php
您可能正在编写的插件的文件:
add_action(\'add_meta_boxes\', \'add_meta_boxes_post_type_switcher\',10,2);
function add_meta_boxes_post_type_switcher($post_type,$post) {
global $pagenow;
if ($pagenow==\'post-new.php\') {
require_once(ABSPATH . \'wp-admin/includes/template.php\');
add_meta_box(\'post_type_switcher\',\'Change Post Type\',
\'post_type_switcher\',$post_type,\'side\',\'high\');
}
}
function post_type_switcher($post,$metabox) {
$post_types = get_post_types();
$new_post_url = admin_url(\'post-new.php\');
$js =<<<JS
<script type="text/javascript">
jQuery(document).ready(function ($) {
$("#post-type-switcher-selector").change(function() {
var post_type = $(this).find(":selected").val();
var new_post_type_url = "{$new_post_url}?post_type=" + post_type;
if (post_type=="post" && "{$new_post_url}"!=window.location.href) {
window.location.href = "{$new_post_url}";
} else if (new_post_type_url!=window.location.href) {
window.location.href = new_post_type_url;
}
});
$(".wp-admin #wpbody-content :input").change(function() {
$("#post-type-switcher-selector").attr("disabled","disabled");
});
});
</script>
JS;
echo $js;
echo \'<select id="post-type-switcher-selector">\';
foreach ( $post_types as $post_type ) {
$post_type_object = get_post_type_object($post_type);
if ($post_type_object->publicly_queryable && $post_type!=\'attachment\') {
echo "\\n\\t<option ";
if ( $post_type == $post->post_type ) // Make default first in list
echo "selected=\'selected\' ";
echo "value=\'{$post_type}\'>";
echo $post_type_object->labels->singular_name;
echo "</option>";
}
}
echo \'</select>\';
}
这就是代码,它应该适合你。如果您对代码中的细节有任何疑问,请提问<但是,我建议您考虑
a consolidated menu like this one 相反,因为我认为它为用户创建了一个更加一致的心理模型,但选择权在你!