it-swarm.cn

在管理界面中使自定义字段标准化

我在我的Wordpress 3安装中添加了一些不同的custom_post_types。它们彼此有点不同,应该在custom_fields中存储唯一的信息。但是,虽然可以存储product_id,但另一个不会。一个将有一个source_url而另一个不会。而不是必须指示我的编辑器应该使用哪些自定义字段与哪些自定义帖子,我如何使每个自定义帖子包括其自定义字段作为UI本身的一部分?

如果你访问“daily_cartoon”,你会有一个只询问标题标题的屏幕媒体
如果您访问“daily_product”,您将有一个只询问标题的屏幕价格汇总等.

7
Sampson

@ Jonathan Sampson

几个插件可以使自定义帖子类型更容易,有些插件也允许你定义自定义字段,没有特定的顺序:

正如我上面提到的,我一直在研究一个不提供类似这样的用户界面而是为复杂字段类型(也是简单的字段类型)的可扩展API。但是在花了一个小时试图打包它后我发现它还没有准备好分发。也许在几个星期内。

上面列出的这些插件现在应该满足您的基本需求,如果您决定将来使用我的这些插件,我将尝试使我的所有这些插件在将来兼容。

您也可能会发现这篇文章有点帮助:

4
MikeSchinkel

您可以添加meta_boxes以便将自定义字段数据存储在其中。因为 add_meta_box 可以根据post_type设置,这将使您能够将不同的meta_box添加到不同的帖子类型。

查看此 帖子 以获取更改自定义帖子类型new/edit scree的完整示例。

5
hannit cohen

我最近需要在主题内工作时解决一个非常类似的问题。代码的基础来自这个 帖子 ,我修改了一些代码

以下是我修改过的代码的第一部分。

    add_action('init', 'limited_post_type');
function my_custom_limited_post_type() 
{
  $labels = array(
    'name' => _x('Limited Post Type', 'post type general name'),
    'singular_name' => _x('Film - DVD', 'post type singular name')
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true, 
    'query_var' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => null,
    'supports' => array('title','editor','author','thumbnail','excerpt', 'page-attributes','custom-fields' ),
    'show_in_nav_menus' => true
  ); 
  register_post_type('limited_post_type', $args);
}

以下是我修改过的代码的第二部分。

foreach ( $scope as $scopeItem ) {
       switch ( $scopeItem ) {
           case "post": {
             // Output on any post screen
             if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" || $post->post_type=="post" )
             $output = true;
             break;}              
            case "page": {
                  // Output on any page screen
                  if ( basename( $_SERVER['SCRIPT_FILENAME'] )=="page-new.php" || $post->post_type=="page" )
            $output = true;
            break;}
             case "limited_post_type": {
                                // Output on limited post_type onlye
            if ((basename( $_SERVER['SCRIPT_FILENAME'] )=="post-new.php" && $post->post_type=="limited_post_type" ) || (basename( $_SERVER['SCRIPT_FILENAME'] )=="post.php" && $post->post_type=="film_dvd" ))
                   $output = true;
                   break;
                  }

如果您愿意,请给我发消息,我很乐意将您的functions.php文件发送给您,供您参考。这绝对是让它成为现实的方式,因为我经历了许多夜晚的头发拉动。

0
jnolte