เป็นไปได้ที่จะสร้างทากอีกครั้งโดยทางโปรแกรมหลังจากเปลี่ยนชื่อของโพสต์หรือไม่ มีการอัปเดตชื่อเรื่องจำนวนมากและกระสุนไม่ได้รับการอัปเดตด้วยชื่อเรื่องดังนั้นฉันต้องสร้างทากเหล่านี้ทั้งหมดใหม่
เป็นไปได้ที่จะสร้างทากอีกครั้งโดยทางโปรแกรมหลังจากเปลี่ยนชื่อของโพสต์หรือไม่ มีการอัปเดตชื่อเรื่องจำนวนมากและกระสุนไม่ได้รับการอัปเดตด้วยชื่อเรื่องดังนั้นฉันต้องสร้างทากเหล่านี้ทั้งหมดใหม่
คำตอบ:
ใช่มันเป็นไปได้
โค้ดตัวอย่างจะต้องมีการทดสอบและปรับปรุง:
// get all posts
$posts = get_posts( array ( 'numberposts' => -1 ) );
foreach ( $posts as $post )
{
// check the slug and run an update if necessary
$new_slug = sanitize_title( $post->post_title );
if ( $post->post_name != $new_slug )
{
wp_update_post(
array (
'ID' => $post->ID,
'post_name' => $new_slug
)
);
}
}
ฉันเพิ่งทำสิ่งนี้ขึ้นอาจมีข้อผิดพลาดบางอย่างและกรณีอื่น ๆ แต่ควรให้ความคิดแก่คุณ นอกจากนี้อาจใช้เวลาสักครู่จึงอาจมีประโยชน์ในการแยกการอัปเดตเป็นชิ้นเล็ก ๆ
post_name
อาร์กิวเมนต์จะถูกละเว้นโดยwp_update_post
อย่างน้อยในรุ่น 3.9 ของแกน
post_name
จะถูกละเว้นภายในwp_update_post()
ฟังก์ชั่น แต่จะถูกนำมาพิจารณาเมื่อการโพสต์การอัพเดทเรียกใช้wp_insert_post()
ฟังก์ชัน: ซึ่งหมายความว่าการส่งกระสุนใหม่ไปยังการอัปเดตจะส่งผลให้เกิดการเปลี่ยนแปลงอย่างมีประสิทธิภาพสำหรับการโพสต์
ปลั๊กอินนี้ยังทำงาน: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs
อย่างไรก็ตามเนื่องจากมันจะทำเฉพาะโพสต์ที่ยังไม่มีทากถ้าคุณต้องการสร้างทากใหม่แก้ไขบรรทัดต่อไปนี้ในปลั๊กอิน:
if ($post->post_name == "") {
ตัวอย่างเช่นคุณสามารถเปลี่ยนเป็น:
if (true) {
ฉันกำลังลองวิธีที่แนะนำโดย Toscho ซึ่งเป็น "instinctive one" แต่ในหลายกรณีมันไม่ทำงาน (cf รหัสหลักเพื่อรับสิ่งที่ฉันหมายถึงโดย "หลายกรณี")
เมื่อมองดูในรหัสฉันพบwp_insert_post_data
ตัวกรองเบ็ดที่เรียกใช้โดยwp_update_post
ฟังก์ชันก่อนใส่โพสต์ iunto ลงในฐานข้อมูล
ด้วยการเรียกตัวกรองนี้และการเปลี่ยนค่าของ$data['post_name']
ฉันก็สามารถทำให้มันทำงานได้อย่างถูกต้อง Wordpress เจ๋ง แต่บันทึกไม่ดี ...
ฉันแก้ไขเอกสารเพื่อให้ผู้คนสามารถหาวิธีแก้ปัญหานี้ได้มากขึ้นหากจำเป็น
คุณสามารถทำได้โดยตรงใน mysql หากคุณต้องการ (เว็บไซต์ woocommerce ของเรามีผลิตภัณฑ์นับหมื่นรายการ)
update wp_posts set post_name = concat(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(lower(post_title), '"', ''), "'", ''), ",", '-'), " ", '-'), "&", ''), ";", ''), "@", ''), ".", ''), ":", ''), "/", ''), "+", ''), "(", ''), ")", ''), "--", '-'), "---", '-'), "--", '-'), "--", '-'), '-', id) where post_type = 'product';
โดยที่ post_type = 'product' - ที่จะทำให้การอัปเดตของคุณเป็นเพียงแค่ผลิตภัณฑ์ woocommerce คุณควรทราบว่าคุณต้องการให้มีข้อ จำกัด ใดบ้างในแบบสอบถามนี้