如何将自定义字段添加到自定义帖子类型?


18

好的,所以我已经注册了一些自定义帖子类型和一些分类法。现在,对于我一生来说,我无法弄清楚我需要在“自定义帖子类型”中添加“自定义字段”的代码。

我需要一个下拉菜单和一个单行文本区域。但是我还需要为帖子类型设置单独的字段。因此,假设发布类型1有3个字段,发布类型2有4个字段,但是这些字段不同。

任何提示都可以帮助我查看编解码器并找到一些内容,但无法理解我需要添加到functions.php文件中的内容


Answers:


19

1
真的会很难。我认为这就像将注册码添加到我的函数中一样简单,就像我们处理帖子类型和分类法一样。
xLRDxREVENGEx 2011年

1
我会给这个答案加一个,但这并不复杂。thinkvitamin.com链接很好地解释了如何添加和保存元框。sltaylor.co.uk链接是有关使用一些出色的编码实践的出色教程。我的警告是在使用save_post挂钩时要小心。它被称为在怪异的时间。确保将WP_DEBUG变量设置为true,以查看使用它时可能出现的错误。
tollmanz

1
只是我使用了thinkvitamin链接进行了一次更新,对您的工作大有帮助,这对于设置自定义字段来说
可谓步履维艰

25

添加/编辑supports参数(使用时register_post_type),以包括custom-fields您自定义帖子类型的发布后编辑屏幕:

'supports' => array( 
  'title', 
  'editor', 
  'excerpt', 
  'thumbnail', 
  'custom-fields', 
  'revisions' 
)

来源:https : //codex.wordpress.org/Using_Custom_Fields#Displaying_Custom_Fields


2
您能解释一下为什么这可以解决问题吗?
s_ha_dum 2013年

1
是的,这可行。谁-1回答了。你能把它取回来吗?问候,
Junaid Qadir

6
...接着.........?
2016年

9

尽管您必须添加一些验证,但是对于当前版本的WordPress,此操作似乎并不复杂。

基本上,您需要两个步骤将“自定义字段”添加到“自定义帖子类型”:

  1. 创建一个保存您的自定义字段的元框
  2. 将自定义字段保存到数据库

这些步骤在此处进行了全局描述:http : //wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type

例:

将名为“功能”的自定义字段添加到名为“ prefix-teammembers”的自定义帖子类型中。

首先添加metabox:

function prefix_teammembers_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Function'), 'prefix_teammembers_metaboxes_html', 'prefix_teammembers', 'normal', 'high');
}
add_action( 'add_meta_boxes_prefix-teammembers', 'prefix_teammembers_metaboxes' );

如果您添加或编辑“ prefix-teammembers”,则add_meta_boxes_{custom_post_type}挂钩被触发。见 http://codex.wordpress.org/Function_Reference/add_meta_boxadd_meta_box()功能。在add_meta_box()is 的上述调用中prefix_teammembers_metaboxes_html,添加了表单字段的回调:

function prefix_teammembers_metaboxes_html()
{
    global $post;
    $custom = get_post_custom($post->ID);
    $function = isset($custom["function"][0])?$custom["function"][0]:'';
?>
    <label>Function:</label><input name="function" value="<?php echo $function; ?>">
<?php
}

在第二步中,将自定义字段添加到数据库。在保存save_post_{custom_post_type}钩子时(从3.7版开始,请参见:https : //stackoverflow.com/questions/5151409/wordpress-save-post-action-for-custom-posts)。您可以挂钩以保存您的自定义字段:

function prefix_teammembers_save_post()
{
    if(empty($_POST)) return; //why is prefix_teammembers_save_post triggered by add new? 
    global $post;
    update_post_meta($post->ID, "function", $_POST["function"]);
}   

add_action( 'save_post_prefix-teammembers', 'prefix_teammembers_save_post' );   

“为什么添加新内容会触发prefix_teammembers_save_post?” 您找到答案了吗,我也绊在了我不记得的额外功能触发器上?
alex

“将名为“功能”的自定义字段添加到名为“ prefix-teammembers”的自定义帖子类型中。”“被称为”是什么意思?名称?singular_name?标签?也许是用作register_post_type中第一个参数的字符串函数,或者只要它是一致的,也许无关紧要
arnoldbird

1

自定义元框和自定义字段有各种插件。如果您查看针对开发人员的插件,则应尝试Meta Box。它轻巧且功能强大。

如果您正在寻找有关如何为元框/自定义字段编写代码的教程,那么是一个不错的开始。这是本系列的第一部分,可以帮助您优化代码以使其易于扩展。


-6
// slider_metaboxes_html , function for create HTML 
function slider_metaboxes( ) {
   global $wp_meta_boxes;
   add_meta_box('postfunctiondiv', __('Custom link'), 'slider_metaboxes_html', 'slider', 'normal', 'high');
}

//add_meta_boxes_slider => add_meta_boxes_{custom post type}
add_action( 'add_meta_boxes_slider', 'slider_metaboxes' );

完善的知识

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.