ความแตกต่างระหว่าง update_user_meta และ update_user_option


11

ทุกคนสามารถอธิบายว่าอะไรคือความแตกต่างระหว่างupdate_user_metaและupdate_user_optionกับสถานการณ์ใดที่สามารถใช้ทั้งสองได้

คำตอบ:


8

ในแง่คนธรรมดาไม่มีความแตกต่างที่สำคัญ! update_user_option()ใช้update_user_meta()ภายใน ข้อแตกต่างคือupdate_user_option()คำนำหน้าชื่อตัวเลือกพร้อมคำนำหน้าตารางฐานข้อมูล + ID บล็อกถ้าคุณอยู่ในหลายไซต์และเพียงนำหน้าตารางหากคุณอยู่ในการติดตั้งไซต์เดียว

ลองดูรหัสของ update_user_option()

/**
 * Update user option with global blog capability.
 *
 * User options are just like user metadata except that they have support for
 * global blog options. If the 'global' parameter is false, which it is by default
 * it will prepend the WordPress table prefix to the option name.
 *
 * Deletes the user option if $newvalue is empty.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id     User ID.
 * @param string $option_name User option name.
 * @param mixed  $newvalue    User option value.
 * @param bool   $global      Optional. Whether option name is global or blog specific.
 *                            Default false (blog specific).
 * @return int|bool User meta ID if the option didn't exist, true on successful update,
 *                  false on failure.
 */
function update_user_option( $user_id, $option_name, $newvalue, $global = false ) {
    global $wpdb;

    if ( !$global )
        $option_name = $wpdb->get_blog_prefix() . $option_name;

    return update_user_meta( $user_id, $option_name, $newvalue );
}

ชื่อตัวเลือกของคุณจะนำหน้าด้วยคำนำหน้าตาราง + ID บล็อก (เฉพาะเมื่อ ID อื่นที่ไม่ใช่ 1 และ 0)

หากคุณตั้งค่าพารามิเตอร์ที่ผ่านมา$globalเพื่อให้มันมีความแตกต่างที่ไม่มีtrueupdate_user_meta()

วัตถุประสงค์การupdate_user_option()ใช้งาน

แตกต่างจากตารางอื่น ๆ WordPress ไม่ได้สร้างตารางแยกสำหรับ usermeta สำหรับแต่ละไซต์ มันจะบันทึกข้อมูลผู้ใช้ในตาราง usermeta หนึ่งตารางสำหรับบล็อกทั้งหมด (เป็นหลายไซต์) มันเป็นเพียงแค่คำนำหน้าชื่อคีย์สำหรับแต่ละเว็บไซต์ด้วยblog prefixเช่นการบล็อกหมายเลข 4 ถูกเก็บไว้เป็นwp_capabilitieswp_4_capabilities

ดังนั้นข้อมูลใดที่คุณจะบันทึกโดยใช้update_user_option()ตัวอย่างเช่นkey_name_abcจะกลายเป็นwp_key_name_abcไซต์หลักในหลายไซต์หรือในการติดตั้งไซต์เดียว ในอนาคตหากคุณแปลงไซต์เดียวเป็นหลายไซต์ข้อมูลจะมีเฉพาะในไซต์หลักเท่านั้น

ใช้ฟังก์ชั่นนี้เมื่อคุณคิดว่าข้อมูลบางอย่างนั้นขึ้นอยู่กับผู้ใช้ + ไซต์เช่นกัน ไม่เหมือนชื่ออีเมล ฯลฯ เนื่องจากข้อมูลเหล่านี้เป็นของผู้ใช้และไซต์อิสระ


7

ทั้งคู่เขียนข้อมูลลงในตาราง“ usermeta” ตัวเลือกผู้ใช้ที่เก็บไว้ในตาราง usermeta จะรักษาคำนำหน้าตาราง WordPress เช่น wp_ ในขณะที่เมตาผู้ใช้ยังเก็บไว้ในตาราง usermeta ไม่ได้

ตัวเลือกผู้ใช้รองรับตัวเลือกเฉพาะบล็อกมีประโยชน์ในหลายไซต์ เมตาของผู้ใช้ขึ้นอยู่กับข้อมูลเมตาเฉพาะของผู้ใช้เช่นข้อมูลโปรไฟล์

ความจริงแล้วพารามิเตอร์ต่างกันมาก ตัวเลือกผู้ใช้มี $ user_id, $ option_name, $ newvalue, $ global และ meta ผู้ใช้มี $ user_id, $ meta_key, $ meta_value, $ prev_value

นี่คือค่าบางอย่างสำหรับทั้งตัวเลือกและผู้ใช้ usermeta

ตัวเลือก

  • wp_user_level
  • wp_user การตั้งค่า
  • wp_capabilities
  • wp_user การตั้งค่าเวลา

ผู้ใช้งาน

  • ชื่อจริง
  • นามสกุล
  • ชื่อเล่น
  • rich_editing
  • show_admin_bar_front
  • admin_color

https://codex.wordpress.org/Function_Reference/update_user_option#Parameters

https://codex.wordpress.org/Function_Reference/update_user_meta#Parameters

ตัวอย่างหน้า codex ช่วยให้ใช้งานได้จริง


1
คุณจะชัดเจนเกี่ยวกับที่จัดเก็บเหล่านี้หรือไม่ ประโยคแรกของคุณแสดงว่าพวกเขาถูกเก็บไว้ในที่เดียวกัน แต่สิ่งที่สองของคุณบอกเป็นนัย ๆ พวกเขาอาจไม่ใช่ตัวอย่างที่ชัดเจนอาจจะดีกว่า โปรดจำไว้ว่าคำตอบควรมีอยู่ในตัวเองดังนั้นจึงยังคงสมเหตุสมผลหลังจากที่ linkrot เริ่มเข้ามา codex นั้นยังคงได้รับการดูแลไม่ดีและถูกแทนที่ด้วย devhub
Tom J Nowell

@TomJNowell สามารถพบได้ใน wp-include / user.php - คุณจะพบค่าสำหรับเมตาและตัวเลือกในตาราง usermeta ฉันจะแก้ไขคำตอบของฉันฮ่า ๆ
Jarmerson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.