Căutați o modalitate de a vă limita rezultatele căutării la titlurile postărilor? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a limita căutarea doar la titlurile postărilor în WordPress.
Instrucțiuni:
Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului:
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
Notă: Dacă aceasta este prima dată când adăugați fragmente de cod în WordPress, consultați ghidul nostru despre cum să adăugați corect fragmente de cod în WordPress, pentru a nu vă defecta accidental site-ul.
Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare să consultați și celelalte articole de pe site, cum ar fi: Cele mai bune 43 de teme de fotografie pentru WordPress și Cele mai bune 11 plugin-uri de slider pentru WordPress.
oricum mă poți ajuta…. Nu reușesc să fac să funcționeze cu DIVI THEME
Bună, mulțumesc pentru acest post. Mă întrebam dacă știi cum să adaptezi codul pentru a funcționa pentru un tip de postare personalizat, în special, pentru WP Job Manager, tipul de postare este: job_listing. Mulțumesc.
cum să ignori spațiile în căutare
de ex. iphone 7 32 gb
și iphone 7 32gb
doar cu un spațiu între 32 și gb returnează o diferență mare în rezultate
cum putem ignora aceste spații în căutarea wordpress adăugând o funcție
astfel încât să obținem aceleași rezultate din ambele tipuri de căutare
Vă rog să mă sfătuiți
Cu stimă
Codul tău funcționează bine pe Local, nu am încercat încă live, PHP-ul meu și cunoștințele despre wordpress nu sunt grozave, am încercat să obțin
$wpdb->postmeta.page_banner_subtitle să fie căutat, precum și post_title, fără succes, în afara domeniului meu, cineva poate ajuta sau mă poate îndruma?
Vă mulțumesc.
este pentru front-end sau funcționează și în backend?
Acesta este pentru front-end.
Funcționează excelent! O bucată de cod excelentă, dar cum ai limita căutarea doar la titlurile postărilor și nu la titlurile paginilor?
Hei Richard, ne bucurăm că îți place. Snippet-ul este scris special pentru titlurile postărilor. Poți vedea că vizează CPT-ul Postări.
Acest lucru funcționa bine pentru mine acum o lună.
Acum primesc erori php.
Ai o soluție actualizată?
Este o bucată de cod grozavă pentru un site mare.
Atenție: Parametrul 2 pentru __search_by_title_only() aștepta o referință, valoare dată în /wp-includes/class-wp-hook.php la linia 303
Ai putea încerca să schimbi linia 1 cu:
function __search_by_title_only( $search, $wp_query )De ce, chiar dacă introduc text în formularul de căutare, acel caracter limită este doar de 5 caractere?
cum se rezolvă?
Mulțumesc, dar funcționează 100% dacă folosești Chrome etc., dar nu bine (obții doar jumătate din rezultatele pe care ar trebui să le obții) dacă folosești I.E. (browserul #1 din lume), în mod bizar!
Ar putea fi o problemă suplimentară a I.E., deoarece acest cod rulează pe server și nu în browser.
Bună, caracterele turcești și caracterele non-turcești se potrivesc ca fiind aceleași. de exemplu, când caut „aşk” poate dă ask, aşk. cum pot remedia asta? vreau doar aşk când caut aşk. Mulțumesc.
Este foarte util – poate fi adaptat pentru a căuta atât titlurile postărilor, cât și ale paginilor?
Acesta este foarte frumos! Mulțumesc!
cod: add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
2 parametri: 500, 2. Ce înseamnă?
500 este prioritatea și 2 este numărul de parametri din funcția callback.
add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
2 parametri 500, 2. Ce înseamnă?
Nu înțeleg prea mult PHP, trebuie să pun ceva după și înainte de acel cod?
Acest lucru este grozav… Mă întreb cum să adaug acest cod la căutarea din backend. Vreau și căutare după titlu pentru backend-ul wp.. 🙂
Mulțumesc! 🙂
Salut,
Acest lucru a fost cu adevărat grozav.
Mi-ai rezolvat problema cu cel mai mic efort din partea mea.
Mulțumesc mult.
Acest lucru este grozav! Am 2 formulare de căutare pe site-ul meu. Este posibil să aplic această funcție doar unuia dintre formularele de căutare?
Hei domnule!
Ești grozav, mersi mult
Mersi Kevin… exact codul pe care îl căutam…
Super, mă bucur să aud că am putut ajuta.
Sunt nou (aka „sunt slab”) atât la PHP, cât și la WordPress. Pun acest cod la întâmplare sau există un loc specific unde trebuie să meargă sau să înlocuiască un cod existent?
Am pus acest cod în partea de jos a paginii functions.php și ecranul meu a fost alb, așa că l-am eliminat.
Ok, adăugam acest cod în fișierul functions.php al WordPress și nu al temei. Funcționează ca prin farmec.
Cod grozav! Acest lucru curăță cu adevărat căutarea wordpress. Există o modalitate de a include primele X cuvinte ale postării? Poate cu funcția substr?
$content = get_the_content();
$content = strip_tags($content);
echo substr($content, 0, 50);
În șablonul rezultatelor căutării, puteți trunchia cantitatea de text afișată folosind eticheta șablonului excerpt pentru un rezultat mai scurt, fără nicio modificare.
Acest lucru este grozav! Ceva ce aș dori să văd este o ajustare a căutării care limitează rezultatele la titluri și etichete. Astfel, am libertatea de a-mi denumi postările cum vreau, fără să mă preocup că trebuie să includ termeni de căutare.
Mă bucur să aud că îți place fragmentul! Dacă vei merge atât de departe cu etichetele etc., aș recomanda pluginul „search everything”, are multe opțiuni pe care le poți configura.
nu funcționează! 🙁
ce versiune de wordpress rulezi în prezent? Testez totul pentru a mă asigura că funcționează înainte de a posta un fragment. Voi reexamina acest lucru doar pentru a mă asigura.
3.2.1
acesta este rezultatul lui $search:
AND ( AND (((wpmtx_posts.post_title LIKE ‘%alice%’) OR
(wpmtx_posts.post_content LIKE ‘%alice%’)) AND ((wpmtx_posts.post_title
LIKE ‘%cooper%’) OR (wpmtx_posts.post_content LIKE ‘%cooper%’)))
(.post_title LIKE ‘%alice%’) AND (.post_title LIKE ‘%cooper%’) OR
(.post_title LIKE ‘%alice cooper%’))
am făcut o mică actualizare, vezi dacă asta rezolvă lucrurile,
Da! Acum funcționează! Mulțumesc foarte mult!!!
3.2.1
acesta este rezultatul lui $search:
AND ( AND (((wpmtx_posts.post_title LIKE ‘%alice%’) OR
(wpmtx_posts.post_content LIKE ‘%alice%’)) AND ((wpmtx_posts.post_title
LIKE ‘%cooper%’) OR (wpmtx_posts.post_content LIKE ‘%cooper%’)))
(.post_title LIKE ‘%alice%’) AND (.post_title LIKE ‘%cooper%’) OR
(.post_title LIKE ‘%alice cooper%’))
[…] [Sursă: WPSNIPP] […]