meta_query 'เปรียบเทียบ' => 'IN' ไม่ทำงาน


14

ก่อนอื่นฉันรู้ว่ามันซ้ำซ้อน แต่ไม่มีคำตอบเก่า ๆ ที่มีประโยชน์

post_metaฉันค้นหาในโพสต์ผ่าน นี่คือรหัสของฉันซึ่งปัจจุบันไม่มีอะไรคืน

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

ถ้าฉันลบmeta_queryมันทำงาน ฉันแน่ใจในสิ่งเหล่านี้:

  • ไม่มีความผิดพลาดในการสะกดคำเป็นหรือkeyvalue
  • โพสต์ประเภทคือ post
  • มีเป็นโพสต์ที่มีค่า 'เดียว' ใน 'system_power_supply' a แต่สาขาที่โพสต์จะถูกสร้างโดยฟิลด์ที่กำหนดเองขั้นสูง

จะsystem_power_supplyต่อเนื่อง?
Howdy_McGee

ใช่แล้ว. นี่คือค่าในตาราง postmeta a:1:{i:0;s:6:"single";}
Rizwan

2
นั่นคือปัญหาของคุณแบบสอบถามเมตาจะไม่ทำงานกับข้อมูลที่ต่อเนื่องกัน หากคุณค้นหาไซต์นี้เพื่อค้นหาข้อมูลที่มีการจัดลำดับคุณจะพบคำตอบบางส่วน แต่ไม่มีวิธีใดที่เหมาะสมที่สุด
Milo

คำตอบ:


13

ไม่มีวิธีง่ายๆในการค้นหาค่าที่เป็นอนุกรมในการสืบค้นเมตา หากรายการค่านั้นไม่ยาวนักคุณอาจตั้งค่าการสืบค้นเมตาหลายรายการ:

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

หรือถ้าคุณต้องการที่จะได้รับสุดยอดแฟนซีคุณสามารถตั้งค่าแบบไดนามิก:

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}

ขอบคุณมากครับ ฉันไม่สามารถบอกคุณได้ว่าคุณปวดหัวใหญ่แค่ไหนในการแก้ไขของฉัน
Rizwan

btw ทำไม meta_value มีข้อมูลต่อเนื่องหากเราไม่สามารถสืบค้นผ่าน meta_query ได้ ข้อผิดพลาดของ wordpress นี้หรือไม่?
Rizwan

1
ฉันเป็นผู้หญิงไม่ใช่ "น้องชาย" แต่ไม่มีปัญหา meta_value มีข้อมูลต่อเนื่องเนื่องจากวิธีการฟิลด์ที่กำหนดเองขั้นสูงบันทึกข้อมูล มันไม่เหมาะอย่างแน่นอน
เจน

1
ฮ่าฮ่าฉันขอโทษสุภาพสตรีของฉัน สองและสามทำงานได้ดีไม่ลองครั้งแรก
Rizwan

2
คุณสามารถลบอันแรกออกมันใช้งานไม่ได้
Toskan

4

ฉันรู้ว่ามันใช้เวลานานมาก แต่ในกรณีที่บางคนมีปัญหาเดียวกัน ฉันดึงผมมาหลายชั่วโมงแล้วก่อนที่ฉันจะพบปัญหา: 'meta_query' กับตัวดำเนินการเปรียบเทียบ 'IN' ดูเหมือนจะไม่ยอมรับอาร์เรย์ปกติ คุณต้องเข้าร่วมก่อนด้วย ','

ดังนั้นในกรณีของคุณสิ่งเช่นนี้ควรใช้งานได้:

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;

ใน WP 5 คุณสามารถส่งผ่านอาร์เรย์ไปยังคีย์ค่าได้โดยตรง หากคุณเชื่อมโยงกับสตริงคุณอาจได้ผลลัพธ์ที่ไม่คาดคิดเกี่ยวกับวิธีที่ wp แบ่งสตริงออกเป็นเซ็กเมนต์สำหรับชิ้นIN()ส่วน เช่น'this that', 'and', 'that'จะกลายเป็น'this','that','and','that'- ดังนั้นดูเหมือนว่าจะดีกว่าที่จะเพียงแค่ให้มันอาร์เรย์
Bananaapple
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.