เนื่องจาก Haibor มีแนวคิดบางอย่างเกี่ยวกับการควบคุม ID และชอบสิ่งที่สะอาดตาและเรียบง่าย ฉันจึงหงุดหงิดมากกับฟังก์ชันการบันทึกแบบร่างอัตโนมัติของ WordPress เวอร์ชันใหม่ มันทำให้เสีย ID ของบันทึกจำนวนมากและทำให้ ID ของบันทึกไม่ต่อเนื่อง กำจัดฟังก์ชั่นนี้ออกไป! -
ให้ฉันอธิบายสถานการณ์ก่อน: ความไม่ต่อเนื่องของ ID ส่วนใหญ่เกิดจากฟังก์ชันสามอย่าง หนึ่งคือฟังก์ชันบันทึกอัตโนมัติ ฟังก์ชันที่สองคือเวอร์ชันที่ผ่านมาหลังการแก้ไข และฟังก์ชันที่สามคือฟังก์ชันร่างอัตโนมัติ! ขึ้นอยู่กับเวอร์ชัน WordPress ที่แตกต่างกัน โซลูชันจะแตกต่างกัน! โปรดเลือกโซลูชันที่เกี่ยวข้อง!
เวอร์ชันก่อน WordPress 3.1 (ไม่รวม 3.1):
1. เปิดไฟล์ wp-config.php และเพิ่มโค้ดต่อไปนี้ที่ด้านหน้าของ "$table_prefix = 'wp_';":
กำหนด ('WP_POST_REVISIONS', false);
กำหนด('AUTOSAVE_INTERVAL', false);
2. ค้นหาและเปิดไฟล์ทั้งสองไฟล์ wp-adminpost-new.php และ wp-adminpost.php และแสดงความคิดเห็นหรือลบ "wp_enqueue_script('autosave');"
//wp_enqueue_script('บันทึกอัตโนมัติ');
3. ค้นหาและเปิดไฟล์ wp-adminincludespost.php ค้นหา "if ($create_in_db) {" และเพิ่มบรรทัดต่อไปนี้ก่อนหน้า:
$create_in_db = เท็จ;
WordPress 3.1 และเวอร์ชันที่ใหม่กว่า (รวมถึง 3.1):
ตั้งแต่เวอร์ชัน 3.1 โปรแกรมได้ทำการเปลี่ยนแปลงฟังก์ชันร่างอัตโนมัติ ขั้นตอนที่สามในวิธีการข้างต้นจะทำให้เกิดการแจ้งเตือนว่าไม่ได้รับอนุญาตให้ดำเนินการเมื่อเผยแพร่บทความในเบื้องหลัง!
ก่อนอื่น เราควรทำตามขั้นตอนที่ 1 และ 2 ในวิธีการข้างต้นเพื่อทราบถึงการปิดใช้งานฟังก์ชันบันทึกอัตโนมัติและฟังก์ชัน Post Revisions ในเวอร์ชันที่ผ่านมา ต่อไป เรามาลองจัดการกับการปิดใช้งานฟังก์ชัน Auto-Draft กันดีกว่า!
เนื่องจากขั้นตอนที่สามในวิธีการข้างต้นไม่ถูกต้อง คุณจะไม่สามารถเพิ่มโค้ด $create_in_db = false; ได้อีกต่อไป ในขณะนี้ ฟังก์ชันการเผยแพร่บทความเป็นเรื่องปกติ แต่ตราบใดที่คุณคลิก "เพิ่มบทความใหม่" ไม่ว่าคุณจะคลิกหรือไม่ก็ตาม คุณแก้ไขบทความหรือไม่ ตราบใดที่คุณไม่คลิกบันทึกในตอนท้าย หรือคลิกบันทึกเป็นแบบร่าง (เช่น ปิดหน้าแก้ไขโดยตรง) โปรแกรมจะเพิ่มบันทึกร่างอัตโนมัติที่มองไม่เห็นตามค่าเริ่มต้นพร้อมชื่อ "ร่างอัตโนมัติ" และสถานะ "ร่างอัตโนมัติ" และสามารถใช้ phpmyadmin เพื่อดึงข้อมูลจากฐานข้อมูลเท่านั้น ลบ! ดังนั้นหากคุณไม่มีไอเดียบล็อกดีๆ อย่าคลิกเพิ่มบทความใหม่ง่ายๆ!
มีวิธีแก้ปัญหาที่สมบูรณ์แบบสองข้อด้านล่าง รหัสพื้นฐานมาจากโฟลเดอร์ชื่อ "รอดำเนินการ" บนคอมพิวเตอร์ ไม่พบแหล่งที่มา ขอขอบคุณฝ่ายอินเทอร์เน็ตและผู้แต่งต้นฉบับ! ที่นี่ฉันจะจัดระเบียบและปรับปรุงและแบ่งปันกับทุกคน ณ จุดนี้ผู้ใช้ที่ไม่มีการควบคุม ID สามารถข้ามไปที่ความคิดเห็นด้านล่างได้โดยตรง ฮ่าๆ! -
หมายเหตุ: จำนวนบรรทัดที่กล่าวถึงด้านล่างขึ้นอยู่กับเวอร์ชัน WordPress 3.2
ตัวเลือกที่ 1: เปลี่ยนร่างอัตโนมัติที่มองไม่เห็นเป็นร่างบันทึกร่างที่มองเห็นได้
อ้างถึงขั้นตอนที่ 3 ข้างต้น ค้นหาและเปิดไฟล์ wp-adminincludespost.php ค้นหา "if ($create_in_db) {" และมองหาประมาณ 423 บรรทัด:
$post_id = wp_insert_post( array( 'post_title' => __( 'ร่างอัตโนมัติ' ), 'post_type' => $post_type, 'post_status' => 'ร่างอัตโนมัติ' ) );
เปลี่ยนโค้ดด้านบนเป็น:
$post_id = wp_insert_post( array( 'post_title' => __( 'แบบร่างอัตโนมัติ' ), 'post_type' => $post_type, 'post_status' => 'ร่าง' ) );
เคล็ดลับ: วิธีแก้ปัญหานี้ไม่ได้ป้องกันการสร้างแบบร่างโดยอัตโนมัติเมื่อคุณคลิก "เพิ่มบทความใหม่" แต่สิ่งที่สร้างขึ้นในขณะนี้คือบันทึกฉบับร่างที่สามารถดูได้ในรายการบทความ และคุณสามารถคลิกเพื่อแก้ไขได้! แน่นอนว่าถ้าคุณคลิกเพื่อเพิ่มบทความใหม่หลายๆ ครั้ง ก็จะสร้างบันทึกฉบับร่างหลายรายการซึ่งไม่ดีนัก 555!
ตัวเลือกที่ 2: หลักการคือการรับแบบร่างอัตโนมัติที่เร็วที่สุดและใช้เป็นบทความปัจจุบัน ซึ่งสามารถรักษาความต่อเนื่องของรหัสบทความตามฟังก์ชันร่างอัตโนมัติดั้งเดิม และลบฟังก์ชันการลบแบบร่างอัตโนมัติเมื่อ 7 วันที่ผ่านมา
ยังคงค้นหาและเปิดไฟล์ wp-adminincludespost.php ค้นหา "if ($create_in_db) {" และมองหาบรรทัดที่ 418 ถึง 427:
ถ้า ( $create_in_db ) {
// ล้างร่างอัตโนมัติเก่าที่มีอายุมากกว่า 7 วัน
$old_posts = $wpdb->get_col( "เลือก ID จาก $wpdb->โพสต์ WHERE post_status = 'auto-draft' AND DATE_SUB( NOW(), INTERVAL 7 DAY ) > post_date" );//ลบร่างอัตโนมัติเมื่อ 7 วันที่แล้ว
foreach ( (อาร์เรย์) $old_posts เป็น $delete )
wp_delete_post( $delete, true ); // บังคับลบ
$post_id = wp_insert_post( array( 'post_title' => __( 'ร่างอัตโนมัติ' ), 'post_type' => $post_type, 'post_status' => 'ร่างอัตโนมัติ' ) );
$โพสต์ = get_post( $post_id );
ถ้า ( current_theme_supports( 'โพสต์รูปแบบ' ) && post_type_supports( $post->post_type, 'โพสต์รูปแบบ' ) && get_option( 'default_post_format' ) )
set_post_format( $โพสต์, get_option( 'default_post_format' ) );
} อื่น {
แทนที่ด้วย
ถ้า ( $create_in_db ) {
global $current_user;//รับผู้ใช้การจัดการการเข้าสู่ระบบปัจจุบัน
$post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY ID ASC LIMIT 1" ); // รับร่างอัตโนมัติเร็วที่สุด
ถ้า ( !$ โพสต์ ) {
$post_id = wp_insert_post( array( 'post_title' => __( 'ร่างอัตโนมัติ' ), 'post_type' => $post_type, 'post_status' => 'ร่างอัตโนมัติ' ) );
$โพสต์ = get_post( $post_id );
-
ถ้า ( current_theme_supports( 'โพสต์รูปแบบ' ) && post_type_supports( $post->post_type, 'โพสต์รูปแบบ' ) && get_option( 'default_post_format' ) )
set_post_format( $โพสต์, get_option( 'default_post_format' ) );
} อื่น {
หลักการของตัวเลือกที่สองได้อธิบายไว้ข้างต้นแล้ว โปรดอ่านพร้อมความคิดเห็นของโค้ดหากคุณต้องการ วิธีแก้ไขสำหรับตัวเลือกที่สองคือหากฐานข้อมูลมีบันทึกแบบร่างอัตโนมัติที่มองไม่เห็นอยู่แล้ว เมื่อคุณคลิกเพื่อเพิ่มบทความใหม่ บทความใหม่จะไม่ถูกสร้างขึ้นโดยอัตโนมัติ แทนที่จะสร้างแบบร่างอัตโนมัติที่มองไม่เห็น ร่างที่มองไม่เห็นเร็วที่สุดจะถูกเรียกโดยตรงว่าเป็นบันทึกฐานข้อมูลที่จำเป็นสำหรับบทความปัจจุบัน ในเวลาเดียวกันเพื่อหลีกเลี่ยงความไม่ต่อเนื่องของ ID คำสั่งโค้ด "ลบแบบร่างอัตโนมัติ เก่ากว่า 7 วัน" ลบแล้ว !
โอเค กรุณานั่งลงหากคุณต้องการรองเท้าเด็ก หากคุณมีข้อเสนอแนะหรือคำถามที่ดีกว่า โปรดฝากข้อความไว้เพื่อแลกเปลี่ยน!
บทความนี้เป็นต้นฉบับของ Nuodou โปรดอย่าลบลิงก์ไปยังบทความนี้เมื่อพิมพ์ซ้ำ: http://www.nuodou.com/item/622.html
ขอขอบคุณ haibor สำหรับการสนับสนุนของคุณ