query_post după titlu?

14 iul. 2011, 17:16:48
Vizualizări: 88.5K
Voturi: 22

Este posibil să creezi o buclă de postări folosind WP_Query sau query_posts folosind titlul?

adică

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

$res = WP_Query($arg);

// bucla...


// încerc acum asta...
$mypostids = $wpdb->get_col("select ID from $wpdb->posts where post_title like 'Abb%' ");

echo count($mypostids).", ";    // funcționează dar nu pot afișa array-ul de ID-uri pentru următorii parametri?

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

$res = WP_Query($args);

while( $res->have_posts() ) : $res->the_post(); ...
0
Toate răspunsurile la întrebare 5
6
37

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

Apoi:

$args = array(
    'post_title_like' => $str
);
$res = new WP_Query($args);
14 iul. 2011 18:21:09
Comentarii

Funcționează excelent, cu excepția celui de-al doilea argument (referința $wp_query), care nu pare să facă parte din funcția de callback a filtrului (vezi http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_where) și va genera o eroare.

maryisdead maryisdead
14 oct. 2013 15:37:09

de fapt, codul este corect așa cum este, cel puțin în WP 4.1.1. Codex-ul este cel care omite al doilea argument, așa că dacă declari 2 argumente în add_filter ca în exemplu, funcționează perfect. Un alt avantaj al acestei soluții este că funcționează pentru post types personalizate.

yitwail yitwail
22 mar. 2015 06:49:55

Aceasta ar trebui să fie răspunsul acceptat deoarece arată cum se poate face folosind funcțiile încorporate în WordPress și nu folosind interogări SQL personalizate.

Sudar Sudar
2 apr. 2015 09:11:17

se pare că primul % lipsește aici. Chiar după LIKE \'. L-am adăugat și a început să funcționeze (4.2.4)

vladkras vladkras
16 aug. 2015 13:45:14

Da, lipsește primul %, l-am adăugat și eu și funcționează :) (poate ar trebui editat răspunsul?)

Toni Michel Caubet Toni Michel Caubet
21 sept. 2016 11:40:03

Funcționează bine și pentru mine, doar că am eliminat & din function title_like_posts_where( $where, &$wp_query ) {, înainte de $wp_query. Mulțumesc lui @Brady.

Jose Carlos Ramos Carmenates Jose Carlos Ramos Carmenates
25 ian. 2017 18:54:12
Arată celelalte 1 comentarii
0

am reușit să fac asta să funcționeze cu ajutorul acestui post în final. Mulțumesc băieți;

$finalArgs =  array (       
        'posts_per_page'=>5, // Numărul de postări pe pagină
        'order' => 'ASC', // Ordinea crescătoare
        'post_type' => 'school' // Tipul de postare                         
    );

    // Crează o nouă instanță
    $searchSchools = new WP_Query( $finalArgs );

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

    $args = array(
        'post__in'=> $mypostids, // ID-urile postărilor
        'post_type'=>'school', // Tipul de postare
        'orderby'=>'title', // Sortează după titlu
        'order'=>'asc' // Ordine crescătoare
    );

    $res = new WP_Query($args);

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

        global $post;

        $EstablishmentNumber = get_post_meta($post->ID,'EstablishmentNumber', true); // Obține numărul instituției

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


    endwhile;
19 iul. 2011 16:04:36
1

Obține titlul dintr-o altă buclă

$title = get_the_title();

și folosește variabila $title dacă dorești.

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

    /* Bucla aici */

endwhile; endif; 

wp_reset_query(); ?>
23 nov. 2011 01:32:33
Comentarii

funcționează pe tipurile personalizate de postări și pe WordPress 3.2.1

Zakir Sajib Zakir Sajib
23 nov. 2011 01:35:41
2

Da, este posibil...

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);
14 iul. 2011 17:29:47
Comentarii

mersi Rajeev - am încercat asta dar se blochează după get_col. Am actualizat mai sus^^^

v3nt v3nt
14 iul. 2011 18:17:31

A funcționat perfect, mulțumesc.

csaborio csaborio
11 ian. 2021 03:55:30
1

Aceste răspunsuri mi se par ca încercări de a hack-ui WordPress.

Consultați aceeași întrebare pe Stack Overflow:

https://stackoverflow.com/questions/25761593/wp-query-with-post-title-like-something-and-category

Această metodă funcționează dacă doriți să faceți o interogare de căutare după titlu, sortată după titlu:

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

Acest exemplu de interogare este pentru un tip de postare numit "watches", iar parametrul 's' (termenul de căutare) este locul unde puteți specifica termenul pentru căutarea în titlurile postărilor.

16 nov. 2018 13:44:07
Comentarii

Aceasta va căuta și în conținut

Mark Kaplun Mark Kaplun
2 iul. 2019 15:17:25