如何更改帖子创建页面的外观?

时间:2011-02-04 作者:Jo Albright

有没有一种方法(插件或其他)可以将其设置为“New Post”页面上有一个下拉列表,允许您选择帖子类型,并且字段可以更改,这样您就可以通过在“New Post”页面上有20个不同的自定义字段来过滤要放入帖子的内容,而不会混淆用户。

此外,是否有插件或其他插件可以创建具有不同值类型(文本区域、列表、文件上载等)的自定义字段?

2 个回复
最合适的回答,由SO网友:Bainternet 整理而成
SO网友:MikeSchinkel

我理解你的担忧;如果你有很多帖子类型,WordPress的管理菜单会很快变得笨拙。我为你所做的就是实现你所要求的东西。它为新的帖子页面创建一个帖子编辑页面元框,其中包含一个自定义帖子类型的下拉列表,如下所示:

WordPress Custom Post Type Selector Metabox

下面是下拉模式下一组自定义帖子类型的外观:

它所做的是使用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 相反,因为我认为它为用户创建了一个更加一致的心理模型,但选择权在你!

结束