有没有办法在创建帖子时设置默认自定义域?

时间:2011-09-24 作者:mike23

当我创建新帖子时,just after clicking "Add New", 当post编辑器显示时,我希望已经打开一些默认的自定义字段输入,而不必使用下拉列表并选择要使用的自定义字段。

视觉上,而不是:

enter image description here

我想要一些类似于:

enter image description here

我知道有一些插件(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”之后)。有吗?

或者可能整个想法都错了,还有其他方法吗?

5 个回复
最合适的回答,由SO网友:Roman 整理而成

行动挂钩save_post 在保存时调用,但我不知道此时是否可以添加元数据。但是,在使用操作挂钩保存帖子后,应该可以创建/更新元数据updated_post_meta.

编辑要在创建后屏幕上预选一些元字段(自定义字段),必须先用空值添加这些元值。

如果你看看post_custom_meta_box() 函数(它是所用元数据库的回调postcustom) 在文件中wp-admin/includes/meta-boxes.php, 您可以看到函数正在使用list_meta() 创建预选元字段。

现在,让我们看看程序流,直到显示此metabox(我们正在寻找可以在此处使用的操作/过滤器挂钩):

WordPress加载文件post-new.php39 使用函数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\');

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴