当我创建新帖子时,just after clicking "Add New", 当post编辑器显示时,我希望已经打开一些默认的自定义字段输入,而不必使用下拉列表并选择要使用的自定义字段。
视觉上,而不是:
我想要一些类似于:
我知道有一些插件(CPT、更多字段等),但我想用一个简单的方法来实现基本功能。
我尝试了类似的方法(我使用的是自定义的post类型“product”):
function register_custom_fields( $post_ID ) {
global $wpdb;
if( !wp_is_post_revision( $post_ID ) ) {
add_post_meta( $post_ID, \'reference\', \'\', true);
add_post_meta( $post_ID, \'price\', \'\', true);
}
}
add_action(\'edit_product\', \'register_custom_fields\');
但这似乎不起作用。我认为钩子可能是错的(因为
edit_post
更新后出现),但我看不到“new post”的任何挂钩(就在用户单击wp admin中的“new post”之后)。有吗?
或者可能整个想法都错了,还有其他方法吗?
最合适的回答,由SO网友:Roman 整理而成
行动挂钩save_post
在保存时调用,但我不知道此时是否可以添加元数据。但是,在使用操作挂钩保存帖子后,应该可以创建/更新元数据updated_post_meta
.
编辑要在创建后屏幕上预选一些元字段(自定义字段),必须先用空值添加这些元值。
如果你看看post_custom_meta_box()
函数(它是所用元数据库的回调postcustom
) 在文件中wp-admin/includes/meta-boxes.php
, 您可以看到函数正在使用list_meta()
创建预选元字段。
现在,让我们看看程序流,直到显示此metabox(我们正在寻找可以在此处使用的操作/过滤器挂钩):
WordPress加载文件post-new.php
此文件在线在数据库中生成默认帖子39
使用函数get_default_post_to_edit()
. 那很好。基本上,这篇文章已经以自动草稿的形式存在于数据库中。不幸的是,目前没有任何钩子来更改这些数据或添加新的内容下一步,文件edit-form-advaned.php
包括在内。此文件将生成孔管理页面,并包含基于supports
post类型的参数在线136
自定义字段元框postcustom
并调用上述函数。同样,没有我们可以使用的动作钩
结论
我认为唯一的方法是使用jQuery或重载postcustom
在运行list_meta()
作用例如。
add_action(\'admin_menu\', \'wpse29358_replaceMetaBoxes\'); // maybe add_meta_boxes hook
function wpse29358_replaceMetaBoxes() {
remove_meta_box(\'postcustom\', {POST_TYPE}, \'normal\');
add_meta_box(\'postcustom\', __(\'Custom Fields\'), \'wpse29358_postcustomMetabox\', {POST_TYPE}, \'normal\', \'core\');
}
function wpse29358_postcustomMetabox($post) {
// Add your meta data to the post with the ID $post->ID
add_post_meta($post->ID, \'key\', \'value\');
// and then copy&past the metabox content from the function post_custom_meta_box()
}
SO网友:Yuri Korolov
这是添加自定义字段支持的正确方法(编辑帖子时不会得到空白字段)
function set_default_meta($post_ID){
$current_field_value = get_post_meta($post_ID,\'Sort Order\',true);
$default_meta = \'100\'; // value
if ($current_field_value == \'\' && !wp_is_post_revision($post_ID)){
add_post_meta($post_ID,\'Sort Order\',$default_meta,true);
}
return $post_ID;
}
add_action(\'wp_insert_post\',\'set_default_meta\');
SO网友:kaplan
我想为我正在开发的WP网站上的每个自定义帖子都提供一个唯一的元描述。所以我也在寻找一个默认的自定义字段,并在这里登陆。
我知道这是一个很老的帖子,但我想我应该把我在mariokostelac.com.
kg是我的命名空间,您可以根据需要命名函数。我对hooks和WP定制一般来说都很陌生,但我相信WP\\u insert\\u post是您正在寻找的钩子。
add_action(\'wp_insert_post\', \'kg_set_default_custom_fields\');
function kg_set_default_custom_fields($post_id)
{
if ( $_GET[\'post_type\'] != \'page\' ) {
add_post_meta($post_id, \'meta-description\', \'\', true);
}
return true;
}
SO网友:Brian Fegter
您应该使用save\\u post操作,并通过检查post类型来隔离您的操作,因为这将在所有post类型上运行。显然,为了让它对你有用,你还需要在其中加入更多的逻辑。您可能应该设置一个post meta字段,检查您是否设置了一次默认值,这样您的用户如果希望将post meta字段留空,就不会感到沮丧。
如果希望默认值为null(如代码示例中所示),那么不要创建函数,因为这只会增加开销,并且默认情况下post meta字段不会填充值。
function register_custom_fields( $post_ID ) {
//Do nonce checking here
if( !wp_is_post_revision( $post_ID ) ) {
if(\'product\' === $_REQUEST[\'post_type\']){
$reference = $_REQUEST[\'reference\'] ? esc_html($_REQUEST[\'reference\']) : \'default_value\';
$price = $_REQUEST[\'price\'] ? esc_html($_REQUEST[\'price\']) : \'default_value\';
update_post_meta( $post_ID, \'reference\', $reference);
update_post_meta( $post_ID, \'price\', $price);
}
}
}
add_action(\'save_post\', \'register_custom_fields\');
SO网友:Edgardo Aleman
如果有人需要按帖子类型选择自定义字段,我会按照我的方式留下下面的代码,并为我做得很好:)
function awh_field_type($post_id){
$awh_f_post = get_post_type($post_id);
$meta_value = \'\';
$meta_name = \'custom\';
if($awh_f_post == \'product\'){
add_post_meta($post_id,$meta_name,$meta_value,true);
}
return $awh_f_post;
}add\\u action(\'wp\\u insert\\u post\',\'awh\\u field\\u type\');