제목으로 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 참조 ) 두 번째 인수 (reference )를 제외하고는 훌륭하게 작동 하며 오류가 발생합니다.
maryisdead

1
실제로, 코드는 적어도 WP 4.1.1에서와 같이 정확합니다. 두 번째 인수를 생략하는 것은 코덱이므로 add_filter예제 와 같이 두 개의 인수를 선언하면 정상적으로 작동합니다. 이 솔루션의 또 다른 장점은 사용자 지정 게시물 유형에 적합하다는 것입니다.
yitwail

1
이것은 사용자 정의 SQL 쿼리를 사용하지 않고 WordPress 내장 기능을 사용하여 수행하는 방법을 보여주기 때문에 받아 들여야합니다.
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(); ?>

그것은 사용자 정의 게시물 유형과 워드 프레스에서 작동 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);

건배 Rajeev-이것을 시도했지만 get_col 후에 붙어 있습니다. 위의 내용을 업데이트했습니다 ^^^
v3nt

0

이 답장은 워드 프레스를 해킹하려는 것으로 보입니다.

스택 오버플로에서 동일한 질문을 참조하십시오.

/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.