保存前根据第3个字段更改帖子中的2个字段

时间:2013-08-22 作者:Derfder

我有一个自定义内容类型,名为cards.

我有3个自定义元字段,称为:

my_cards_activity (选择字段类型;选项0和1)

my_cards_user (选择类型;许多选项)

my_cards_datetime (文本字段类型;yyyy-mm-dd-hh:mm格式)

当我按下保存按钮时,我想得到my_cards_activity 字段(值可以是0或1),如果值为0,则更改my_cards_datetimemy_cards_user 要清空值,只有在更改后才能全部保存。如果是1,则不执行任何操作。

在保存之前怎么做这样的事情?我的代码应该如何在函数中。php看起来像什么?

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

使用挂钩save_post 并在“正常”保存元字段例程之后执行保存的函数中放置一个if。

add_action( \'save_post\', \'this_is_the_function_name\' ); 

function this_is_the_function_name( $post_id ) { 

    // No auto saves 
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return; 

    // make sure the current user can edit the post 
    if( ! current_user_can( \'edit_post\' ) ) return;

    // assure the post type
    if ( ! get_post_type($post_id) == \'cards\' ) return;

    // assure the data are sended by the form
    if (
       ! isset($_POST[\'my_cards_activity\']) ||
       ! isset($_POST[\'my_cards_datetime\']) || ! isset(\'my_cards_user\')
    ) return;

    $activity = $_POST[\'my_cards_activity\'];

    // and now the simply logic
    if ( $activity == 1 ) {
        $datetime = $_POST[\'my_cards_datetime\'];
        $user = $_POST[\'my_cards_user\'];
    } else {
        $datetime = \'\';
        $user = \'\';    
    }

    // save data as array
    $meta_data = compact("activity", "datetime", "user");
    update_post_meta($post_id, \'card_data\', $meta_data);

    // if you want can save data as 3 different meta fields in this case
    // delete the previous 2 lines and uncommente the following
    // update_post_meta($post_id, \'card_activity\', $activity);
    // update_post_meta($post_id, \'datetime\', $datetime);
    // update_post_meta($post_id, \'user\', $user);        

} 
如果在元数据库中设置了nonce字段,请在保存之前对其进行检查。

看见Codex 适用于:

结束

相关推荐