query_post theo tiêu đề?


18

có thể tạo một vòng lặp các bài đăng bằng WP_Query hoặc query_posts bằng tiêu đề không?

I E

$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(); ...

Câu trả lời:


31

Hàm.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;
}
?>

Sau đó:

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

Hoạt động tuyệt vời ngoại trừ đối số thứ hai (tham chiếu $wp_query), dường như không phải là một phần của cuộc gọi lại bộ lọc (xem codex.wordpress.org/Plugin_API/Filter_Reference/posts_where ) và sẽ phát sinh lỗi.
maryonomead

1
thực tế, mã là chính xác, ít nhất là trong WP 4.1.1. Đó là codex bỏ qua đối số thứ hai, vì vậy nếu bạn khai báo 2 đối số add_filternhư trong ví dụ, nó hoạt động tốt. Một ưu điểm khác của giải pháp này là nó hoạt động cho các loại bài tùy chỉnh.
vào

1
Điều này nên được chấp nhận câu trả lời vì điều này cho thấy cách thực hiện bằng các hàm dựng sẵn của WordPress và không sử dụng truy vấn SQL tùy chỉnh.
Sudar

1
Dường như, đó là lần đầu tiên %bị bỏ lỡ ở đây. Ngay sau đó LIKE \'. Tôi đã thêm nó và nó bắt đầu hoạt động (4.2.4)
vladkras

Có, thiếu cái đầu tiên %, cũng được thêm vào và hoạt động :) (có lẽ nên chỉnh sửa câu trả lời?)
Toni Michel Caubet

3

cuối cùng đã làm việc với sự giúp đỡ từ bài đăng này. Cố lên các chàng trai;

$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

Lấy tiêu đề từ một vòng lặp khác

$title = get_the_title();

và sử dụng biến $ title nếu bạn muốn.

<?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(); ?>

nó hoạt động trên loại bài tùy chỉnh và wordpress 3.2.1
Zakir Sajib

0

Vâng, điều đó là có thể ....

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);

cổ vũ Rajeev - đã thử điều này nhưng nó bị kẹt sau get_col. Tôi đã cập nhật ở trên
^^ ^

0

Những câu trả lời này có vẻ như tôi đang cố gắng hack wordpress.

Tham khảo cùng một câu hỏi về tràn stack:

/programming/25761593/wp-query-with-post-title-like-s Something-and-c Category

Điều này hoạt động nếu bạn muốn thực hiện một truy vấn tìm kiếm theo tiêu đề được sắp xếp theo tiêu đề:

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

Truy vấn ví dụ này dành cho loại bài đăng có tên đồng hồ và 's' (thuật ngữ tìm kiếm) là nơi bạn có thể tìm kiếm tiêu đề bài đăng của mình trên truy vấn


1
Điều này cũng sẽ tìm kiếm nội dung
Mark Kaplun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.