WordPress update_post_meta返回奇数结果

时间:2014-04-02 01:56:01

标签: wordpress

WordPress update_post_meta的问题。

我有一个应该更新_gravity_form_data的函数。它有效,但由于某种原因它正在添加额外的数据。这是功能:

这是功能:

function wpufe_gravity_custom_video( $post_id ) {
    if (isset( $_POST['custom_video'])) {

        $custom_video = 'a:13:{s:2:"id";s:1:"2";s:13:"display_title";b:0;s:19:"display_description";b:0;s:25:"disable_woocommerce_price";s:2:"no";s:12:"price_before";s:0:"";s:11:"price_after";s:0:"";s:20:"disable_calculations";s:3:"yes";s:22:"disable_label_subtotal";s:2:"no";s:21:"disable_label_options";s:2:"no";s:19:"disable_label_total";s:2:"no";s:14:"label_subtotal";s:8:"Subtotal";s:13:"label_options";s:7:"Options";s:11:"label_total";s:5:"Total";}';

        update_post_meta( $post_id, '_gravity_form_data', $custom_video );
    }
}
add_action( 'wpuf_add_post_after_insert', 'wpufe_gravity_custom_video' );
add_action( 'wpuf_edit_post_after_update', 'wpufe_gravity_custom_video' );

应该让_gravity_form_data有这样的内容:

a:13:{s:2:"id";s:1:"2";s:13:"display_title";b:0;s:19:"display_description";b:0;s:25:"disable_woocommerce_price";s:2:"no";s:12:"price_before";s:0:"";s:11:"price_after";s:0:"";s:20:"disable_calculations";s:3:"yes";s:22:"disable_label_subtotal";s:2:"no";s:21:"disable_label_options";s:2:"no";s:19:"disable_label_total";s:2:"no";s:14:"label_subtotal";s:8:"Subtotal";s:13:"label_options";s:7:"Options";s:11:"label_total";s:5:"Total";}

然而,当它更新_gravity_form_data字段时,其输出为:

s:429:"a:13:{s:2:"id";s:1:"2";s:13:"display_title";b:0;s:19:"display_description";b:0;s:25:"disable_woocommerce_price";s:2:"no";s:12:"price_before";s:0:"";s:11:"price_after";s:0:"";s:20:"disable_calculations";s:3:"yes";s:22:"disable_label_subtotal";s:2:"no";s:21:"disable_label_options";s:2:"no";s:19:"disable_label_total";s:2:"no";s:14:"label_subtotal";s:8:"Subtotal";s:13:"label_options";s:7:"Options";s:11:"label_total";s:5:"Total";}";

为什么要添加s:429:"在开始然后额外&#34 ;;在末尾?最重要的是,我该如何解决? :)

非常感谢!


更新:建议序列化数据,所以我做了:

function wpufe_gravity_custom_video( $post_id ) {
    if (isset( $_POST['custom_video'])) {
        $gubcustom_video = array('id' => 2, 'display_title' => '', 'display_description' => '', 'disable_woocommerce_price' => 'no', 'price_before' => '', 'price_after' => '', 'disable_calculations' => 'yes', 'disable_label_subtotal' => 'no', 'disable_label_option' => 'no', 'disable_label_total' => 'no', 'label_subtotal' => 'Subtotal', 'label_options' => 'Options', 'label_total' => 'Total');
        $gubvideodata = serialize($gubcustom_video);
        update_post_meta( $post_id, '_gravity_form_data', $gubvideodata );
    }
}
add_action( 'wpuf_add_post_after_insert', 'wpufe_gravity_custom_video' );
add_action( 'wpuf_edit_post_after_update', 'wpufe_gravity_custom_video' );

...并且仍然将错误的数据发布到mysql。

有没有办法只插入我需要插入的字符串?我想做的就是用该文本更新数据库。

我可以轻松地在phpMySql中执行此操作,只需复制并粘贴文本即可。这是我希望的解决方案。再次感谢!

2 个答案:

答案 0 :(得分:0)

它看起来像是您尝试手动插入的序列化数组,但您应该通过使用serialize函数对其进行序列化来插入它,例如:

$custom_video = array('id' => 2, 'display_title' => '');
$data = serialize($custom_video);
update_post_meta( $post_id, '_gravity_form_data', $data );

另外,请尝试使用以下钩子:

add_action( 'save_post', 'save_meta_data' );

function save_meta_data($post_id)
{
    $custom_video = array('id' => 2, 'display_title' => '');
    $data = serialize($custom_video);
    update_post_meta( $post_id, '_gravity_form_data', $data );
}

答案 1 :(得分:0)

问题解决了。 WP User Frontend Pro将元键设置为自己的值“1”,使其重新序列化序列化字符串。通过删除WPUF元键并离开该字段解决了问题。