เป็นการยากที่จะตอบคำถามของคุณอย่างเป็นรูปธรรม ส่วนแรกนั้นง่ายแม้ว่า ฉันเพิ่งทำสิ่งที่คล้ายกันใน stackoverflow
คีย์ Meta ถูกเปรียบเทียบและตรงกันทั้งหมด WP_Query
ไม่มีวิธีในการปรับพฤติกรรมนี้ด้วยพารามิเตอร์ง่าย ๆ แต่เราสามารถแนะนำตัวเราเองแล้วปรับposts_where
ข้อเพื่อทำการLIKE
เปรียบเทียบกับคีย์เมตา
ตัวกรอง
นี่เป็นเพียงตัวกรองพื้นฐานปรับตามต้องการ
add_filter( 'posts_where', function ( $where, \WP_Query $q )
{
// Check for our custom query var
if ( true !== $q->get( 'wildcard_on_key' ) )
return $where;
// Lets filter the clause
$where = str_replace( 'meta_key =', 'meta_key LIKE', $where );
return $where;
}, 10, 2 );
ในขณะที่คุณสามารถดูตัวกรองจะถูกยิงก็ต่อเมื่อเราตั้งค่าพารามิเตอร์ที่กำหนดเองใหม่ของเราไปwildcard_on_key
true
เมื่อตรวจสอบแล้วเราเพียงเปลี่ยนเครื่องมือ=
เปรียบเทียบเป็นเครื่องมือLIKE
เปรียบเทียบ
เพียงแค่ทราบเกี่ยวกับสิ่งนี้LIKE
การเปรียบเทียบมีราคาแพงกว่ามากเมื่อเปรียบเทียบกัน
คำถาม
คุณสามารถค้นหาโพสต์ของคุณตามเพื่อรับโพสต์ทั้งหมดด้วยเมตาคีย์ like_status_{user_id}
$args = [
'wildcard_on_key' => true,
'meta_query' => [
[
'key' => 'like_status_',
'value' => 1,
]
]
];
$query = new WP_Query( $args );
คำถามอื่น ๆ
ช่องที่กำหนดเองไม่ได้มีผลกระทบต่อประสิทธิภาพการทำงานของคุณสามารถอ่านโพสต์ของฉันในเรื่องนี้ที่นี่ อย่างไรก็ตามฉันมีปัญหากับการที่คุณพูดว่าโพสต์แต่ละรายการสามารถมีไลค์นับร้อยหรือพันรายการ สิ่งนี้สามารถส่งผลให้คุณได้รับประสิทธิภาพและการแคชข้อมูลฟิลด์ที่กำหนดเองจำนวนมากเช่นนั้น นอกจากนี้ยังสามารถบล็อก db ของคุณด้วยข้อมูลฟิลด์ที่กำหนดเองที่ไม่จำเป็นจำนวนมากซึ่งทำให้ยากต่อการบำรุงรักษา
ฉันไม่ใช่แฟนตัวยงของการจัดเก็บข้อมูลต่อเนื่องในฟิลด์ที่กำหนดเองเนื่องจากไม่สามารถค้นหาหรือสั่งซื้อโดยใช้ข้อมูลที่ต่อเนื่องกันได้ อย่างไรก็ตามฉันขอแนะนำให้เก็บ ID ผู้ใช้ทั้งหมดไว้ในอาร์เรย์ภายใต้ฟิลด์ที่กำหนดเองหนึ่งฟิลด์ คุณสามารถอัปเดตอาร์เรย์ด้วย ID ผู้ใช้เมื่อผู้ใช้ต้องการโพสต์ การรับข้อมูลภาคสนามที่กำหนดเองและวนซ้ำอาร์เรย์ของ ID และทำบางสิ่งบางอย่างกับ ID นั้นเป็นเรื่องง่าย เพียงแค่ได้ดูget_post_meta()
การอัพเดตฟิลด์ที่กำหนดเองนั้นทำได้ง่ายเช่นกัน เพื่อที่คุณจะต้องดู update_post_meta()
ฉันไม่ทราบวิธีที่คุณสร้างเขตข้อมูลที่กำหนดเองของคุณ แต่update_post_meta()
เป็นสิ่งที่คุณต้องการใช้
หากคุณต้องการส่งอีเมลหรือการแจ้งเตือนแบบพุชเมื่อมีการอัปเดตฟิลด์ที่กำหนดเองคุณจะสามารถขอใช้งานต่อไปนี้ได้ ( ดูupdate_metadata()
บริบท )
สรุปผลการศึกษา
ก่อนที่ฉันจะโพสต์สิ่งนี้อีกครั้งก่อนที่คุณจะเดินทางไปตามลำดับตรวจสอบให้แน่ใจว่าคุณไม่จำเป็นต้องเรียงลำดับตามข้อมูลที่เรียงลำดับหรือค้นหาข้อมูลเฉพาะภายในข้อมูลอนุกรม