问题描述
好的,所以我已经注册了一些自定义帖子类型和一些分类。现在,对于我的生活,我无法找出我需要添加一个自定义字段到我的自定义帖子类型的代码。
我需要一个下拉菜单和一行文字区域。但是我也需要为 Post 类型分隔字段。所以说,帖子类型有一个有 3 个字段,而帖子类型 2 有 4 个字段,但字段是不同的。
任何提示都可以帮助我查看该抄本,并发现了一些东西,但是无法理解我需要添加到我的 functions.php
文件
最佳解决方案
这可能比你想象的更复杂,我会研究一下框架:
如果你想写自己的,这里有一些体面的教程:
-
http://net.tutsplus.com/tutorials/wordpress/creating-custom-fields-for-attachments-in-wordpress/
-
http://sltaylor.co.uk/blog/control-your-own-wordpress-custom-fields/
-
http://thinkvitamin.com/code/create-your-first-wordpress-custom-post-type/
次佳解决方案
添加/编辑 supports
参数 (使用 register_post_type
时) 将 custom-fields
包含到您自定义帖子类型的后期编辑屏幕中:
'supports' => array(
'title',
'editor',
'excerpt',
'thumbnail',
'custom-fields',
'revisions'
)
第三种解决方案
虽然您应该添加一些验证,但是对于当前版本的 WordPress,此操作似乎并不复杂。
基本上您需要两个步骤来将自定义字段添加到自定义帖子类型中:
-
创建一个保存你的自定义字段的 metabox
-
将您的自定义字段保存到数据库
这些步骤在这里全面描述:http://wordpress.org/support/topic/is-it-possible-to-add-an-extra-field-to-a-custom-post-type
例:
将称为”function” 的自定义字段添加到名为”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}
钩子被触发。有关 add_meta_box()
功能,请参阅 http://codex.wordpress.org/Function_Reference/add_meta_box 。在上面调用 add_meta_box()
是 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' );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。