簡體   English   中英

為什么通過update_post_meta將這些值另存為字符串?

[英]Why are these values being saved as a string via update_post_meta?

我剛剛注意到該數組中的所有值都是整數或null,當我使用update_post_meta ,它會將整數和null值都存儲為字符串,而不是對象。

當我在get_post_meta的輸出上進行var_dump時,得到以下信息:

array (size=1)
  0 => 
    array (size=5)
      0 => string '238' (length=3)
      1 => string '234' (length=3)
      2 => string 'null' (length=4)
      3 => string 'null' (length=4)
      4 => string 'null' (length=4)

為什么會這樣,我該如何解決?

function bv_faq_procedure_meta_box_save($post_id) {
    // Check the nonce
    if(!isset($_POST['bv_faq_procedure_meta_box_nonce']) || !wp_verify_nonce($_POST['bv_faq_procedure_meta_box_nonce'], basename( __FILE__ ))) {
    return;
    }

    // Check the user's permissions.
    if(!current_user_can('edit_post', $post_id)) {
    return;
    }

    $bv_faq_procedures = array(
        isset($_POST['bv_faq_procedure_meta_1']) ? $_POST['bv_faq_procedure_meta_1'] : null,
        isset($_POST['bv_faq_procedure_meta_2']) ? $_POST['bv_faq_procedure_meta_2'] : null,
        isset($_POST['bv_faq_procedure_meta_3']) ? $_POST['bv_faq_procedure_meta_3'] : null,
        isset($_POST['bv_faq_procedure_meta_4']) ? $_POST['bv_faq_procedure_meta_4'] : null,
        isset($_POST['bv_faq_procedure_meta_5']) ? $_POST['bv_faq_procedure_meta_5'] : null
    );

    // Save meta
    if(isset($_POST['bv_faq_procedure_meta_1']) || isset($_POST['bv_faq_procedure_meta_2']) || isset($_POST['bv_faq_procedure_meta_3']) || isset($_POST['bv_faq_procedure_meta_4']) || isset($_POST['bv_faq_procedure_meta_5'])) {
        update_post_meta($post_id, 'Procedure', $bv_faq_procedures);
    } else {
    // delete data
        delete_post_meta($post_id, 'Procedure');
    }
}
add_action('save_post_faq', 'bv_faq_procedure_meta_box_save', 10, 2 );

查看該函數的源代碼,它告訴您,如果不是標量類型,則需要自己序列化數組:

 @param mixed $meta_value Metadata value. Must be serializable if non-scalar. 

所以試試看:

$bv_faq_procedures = array(
    isset($_POST['bv_faq_procedure_meta_1']) ? $_POST['bv_faq_procedure_meta_1'] : null,
    isset($_POST['bv_faq_procedure_meta_2']) ? $_POST['bv_faq_procedure_meta_2'] : null,
    isset($_POST['bv_faq_procedure_meta_3']) ? $_POST['bv_faq_procedure_meta_3'] : null,
    isset($_POST['bv_faq_procedure_meta_4']) ? $_POST['bv_faq_procedure_meta_4'] : null,
    isset($_POST['bv_faq_procedure_meta_5']) ? $_POST['bv_faq_procedure_meta_5'] : null
);

// Here you serialize your array.
$serializedArray = serialize($array);

// Save meta
if(isset($_POST['bv_faq_procedure_meta_1']) || isset($_POST['bv_faq_procedure_meta_2']) || isset($_POST['bv_faq_procedure_meta_3']) || isset($_POST['bv_faq_procedure_meta_4']) || isset($_POST['bv_faq_procedure_meta_5'])) {
    // And you provide the serialized array insead.
    update_post_meta($post_id, 'Procedure', $serializedArray);
} else {
// delete data
    delete_post_meta($post_id, 'Procedure');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM