query_post nach Titel?

18

Ist es möglich, eine Schleife von Beiträgen mit WP_Query oder query_posts unter Verwendung des Titels zu erstellen?

dh

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

Antworten:

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;
}
?>

Dann:

$args = array(
    'post_title_like' => $str
);
$res = new WP_Query($args);
Brady
quelle
Funktioniert hervorragend mit Ausnahme des zweiten Arguments (das referenzierte $wp_query), das nicht Teil des Filterrückrufs zu sein scheint (siehe codex.wordpress.org/Plugin_API/Filter_Reference/posts_where ) und einen Fehler generiert.
Maryisdead
1
Tatsächlich ist der Code so, wie er ist, zumindest in WP 4.1.1. Es ist der Codex, in dem das zweite Argument weggelassen wird. Wenn Sie also 2 Argumente add_filterwie im Beispiel deklarieren , funktioniert dies einwandfrei. Ein weiterer Vorteil dieser Lösung ist, dass sie für benutzerdefinierte Beitragstypen funktioniert.
Yitwail
1
Dies sollte als Antwort akzeptiert werden, da dies zeigt, wie es mit den in WordPress integrierten Funktionen und nicht mit benutzerdefinierten SQL-Abfragen gemacht wird.
Sudar
1
es scheint, dass hier zuerst %verfehlt wird. Gleich danach LIKE \'. Ich fügte es hinzu und es fing an zu arbeiten (4.2.4)
vladkras
Ja, das erste fehlt %, auch hinzugefügt und funktioniert :) (sollte vielleicht die Antwort bearbeiten?)
Toni Michel Caubet
3

habe dies mit der Hilfe von diesem Beitrag am Ende funktioniert. Prost;

$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;
v3nt
quelle
3

Holen Sie sich den Titel aus einer anderen Schleife

$title = get_the_title();

und verwenden Sie die Variable $ title, wenn Sie möchten.

<?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(); ?>
Zakir Sajib
quelle
Es funktioniert auf benutzerdefinierten Post-Typ und WordPress 3.2.1
Zakir Sajib
0

Ja, es ist möglich....

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 Vyas
quelle
Prost Rajeev - versuchte dies, aber es bleibt nach dem get_col stecken. Ich habe die oben genannten ^^^
v3nt
0

Diese Antworten scheinen mir ein Versuch zu sein, WordPress zu hacken.

Lesen Sie die gleiche Frage zum Stapelüberlauf:

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

Dies funktioniert, wenn Sie eine Suchabfrage nach Titel, sortiert nach Titel, durchführen möchten:

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

Diese Beispielabfrage bezieht sich auf einen Beitragstyp mit dem Namen "watches" und das "s" (Suchbegriff) ist der Ort, an dem Sie in der Abfrage nach Ihren Beitragstiteln suchen können

gtamborero
quelle
1
Dies wird auch den Inhalt durchsuchen
Mark Kaplun