query_post ตามชื่อ?


18

เป็นไปได้หรือไม่ที่จะสร้างการวนซ้ำของโพสต์ด้วย WP_Query หรือ query_posts

กล่าวคือ

$args = array('post_title'='LIKE '.$str.'% ');

$res = WP_Query($arg);

// the loop...


// trying this now...
$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title like 'Abb%' ");

echo count($mypostids).", ";    // works but can't echo out array of IDs for the next args?

$args = array(
    'post__in'=> $mypostids
);

$res = WP_Query($args);

while( $res->have_posts() ) : $res->the_post(); ...

คำตอบ:


31

functions.php

<?php
add_filter( 'posts_where', 'title_like_posts_where', 10, 2 );
function title_like_posts_where( $where, $wp_query ) {
    global $wpdb;
    if ( $post_title_like = $wp_query->get( 'post_title_like' ) ) {
        $where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'';
    }
    return $where;
}
?>

แล้ว:

$args = array(
    'post_title_like' => $str
);
$res = new WP_Query($args);

ใช้งานได้ดียกเว้นอาร์กิวเมนต์ที่สอง (อ้างอิง$wp_query) ซึ่งดูเหมือนจะไม่ได้เป็นส่วนหนึ่งของการเรียกกลับตัวกรอง (ดูcodex.wordpress.org/Plugin_API/Filter_Reference/posts_where ) และจะสร้างข้อผิดพลาด
maryisdead

1
จริง ๆ แล้วรหัสนั้นถูกต้องตามที่เป็นอยู่อย่างน้อยใน WP 4.1.1 มันคือโคเด็กซ์ที่ไม่ใส่อาร์กิวเมนต์ที่สองดังนั้นถ้าคุณประกาศ 2 อาร์กิวเมนต์ในadd_filterตัวอย่างมันใช้งานได้ดี ข้อดีอีกประการของโซลูชันนี้คือสามารถใช้ได้กับประเภทโพสต์ที่กำหนดเอง
yitwail

1
คำตอบนี้ควรได้รับการยอมรับเนื่องจากสิ่งนี้แสดงให้เห็นว่าต้องทำอย่างไรโดยใช้ฟังก์ชั่นในตัวของ WordPress และไม่ใช้คำสั่ง SQL ที่กำหนดเอง
Sudar

1
ดูเหมือนว่าเป็นครั้งแรกที่%พลาดที่นี่ หลังจากLIKE \'นั้น ฉันเพิ่มและเริ่มทำงาน (4.2.4)
vladkras

ใช่หายไปก่อน%เพิ่มด้วยและใช้งานได้ :) (อาจจะต้องแก้ไขคำตอบหรือไม่)
Toni Michel Caubet

3

ได้รับการทำงานด้วยความช่วยเหลือจากโพสต์นี้ในที่สุด ไชโยพวก;

$finalArgs =  array (       
        'posts_per_page'=>5,
        'order' => 'ASC',
        'post_type' => 'school'                         
    );

    // Create a new instance
    $searchSchools = new WP_Query( $finalArgs );

    $mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title LIKE '".$str."%' ");

    $args = array(
        'post__in'=> $mypostids,
        'post_type'=>'school',
        'orderby'=>'title',
        'order'=>'asc'
    );

    $res = new WP_Query($args);

    while( $res->have_posts() ) : $res->the_post();

        global $post;

        $EstablishmentNumber = get_post_meta($post->ID,'EstablishmentNumber', true);

        $schl = array('id'=>$EstablishmentNumber, 'label'=>$post->post_title , 'value'=>$EstablishmentNumber );     
        $matchedSchools[] = $schl;


    endwhile;

3

รับชื่อจากวงอื่น

$title = get_the_title();

และใช้ตัวแปร $ title หากคุณต้องการ

<?php

global $post, $current_post_id, $title;

function filter_where($where = ''){

    global $title;
    $where .= "AND post_title = '$title'";
    return $where;

}
add_filter('posts_where', 'filter_where');

$query = new WP_Query(array('post_type' => 'sessions') );
if ( have_posts() ) : while ( $query->have_posts() ) : $query->the_post();

    /* Loop here */

endwhile; endif; 

wp_reset_query(); ?>

มันทำงานบนประเภทโพสต์ที่กำหนดเองและ WordPress 3.2.1
Zakir Sajib

0

ใช่มันเป็นไปได้ ....

global $wpdb;

$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title like '%$str%' ");

$args = array('post__in'=$mypostids);

$res = WP_Query($arg);

ไชโยราเจฟ - ลองทำสิ่งนี้ แต่มันจะติดอยู่หลังจาก get_col ฉันได้อัปเดตข้างต้นแล้ว ^^^
v3nt

0

ดูเหมือนว่าฉันจะตอบแฮ็คเวิร์ดเพรส

อ้างถึงคำถามเดียวกันใน stack overflow:

/programming/25761593/wp-query-with-post-title-like-something-and-category

วิธีนี้ใช้ได้ผลถ้าคุณต้องการค้นหาด้วยชื่อเรียงลำดับตามชื่อเรื่อง:

$the_query = new WP_Query( 
  array(
    'post_type' => 'watches',
    'posts_per_page' => 5,
    'orderby' => 'title',
    's' => 'my title'
  ) 
);

แบบสอบถามตัวอย่างนี้ใช้สำหรับประเภทการโพสต์ที่มีชื่อว่า watches และ 's' (คำค้นหา) เป็นที่ที่คุณสามารถค้นหาชื่อโพสต์ของคุณในการสืบค้น


1
สิ่งนี้จะค้นหาเนื้อหาเช่นกัน
Mark Kaplun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.