21
2013
WordPress – Zmiana funkcji wyszukującej posty (posts_search)
Chciałbyś zmienić sposób przeszukiwania postów w swoim WordPressie? Zmodyfikować zapytanie MySQL używane w formularzu „Szukaj…”? Tutaj opiszę jak w pełni uzyskać nad tym kontrolę przez nałożenie własnego filtra.
Opis
Mechanizm wyszukujący posty jest wbudowany w funkcję get_posts()
w pliku /wp-includes/query.php
. Odpowiada on nie tylko za wyszukiwanie, lecz także za zwykłe listowanie artykułów bloga.
W funkcji tej jest fragment:
1 2 3 4 |
$this->request = $old_request = "SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits"; if ( !$q['suppress_filters'] ) { $this->request = apply_filters_ref_array( 'posts_request', array( $this->request, &$this ) ); } |
Pokazuje to nam wyraźnie, że możemy zastosować filtr o nazwie posts_request
, aby zmodyfikować całkowicie listę znalezionych artykułów.
Rowiązanie
Aby wykorzystać powyższą możliwość, należy w pliku functions.php
swojego motywu dodać wywołanie naszej własnej funkcji o nazwie np: my_search
.
Robimy to przez nałożenie filtra:
1 |
add_filter('posts_request','my_search'); |
Następnie opisujemy ciało naszej funkcji:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function my_search ($sql) { // argument $sql jest kwerendą Wordpressa, którą chcemy zmodyfikować if ( isset($_GET['s']) ) { // warunek sprawdzający, czy jest aktualnie użyte wyszukiwanie global $wpdb; // w tym przykładzie potrzebne, aby uzyskać prefix tabel w bazie danych // tworzymy własne dowolne zapytanie $sql = " SELECT SQL_CALC_FOUND_ROWS * FROM " . $wpdb->prefix . "posts WHERE ID = TWOJE_ID ORDER BY post_title "; // bez tego nie zadziała :) remove_filter('posts_request', 'my_search'); } return $sql; } |
Obydwie powyższe instrukcje dopisujemy do pliku functions.php
w używanym przez nas motywie.
Dodatkowe informacje
Więcej informacji na temat filtru posts_request
znajdziesz w dokumentacji WordPressa:
http://codex.wordpress.org/Plugin_API/Filter_Reference/posts_request
Podobne tematy
Dodaj komentarz
O mnie
Najnowsze wpisy
- Drzewo kategorii – budowa struktury od dołu do góry
- PHPExcel – export + import pliku XLS
- WordPress + Polylang – Tworzenie klasy CSS z ID strony/wpisu w wybranym języku
- Mailing – Poprawna konstrukcja szablonu maila HTML/CSS i prawidłowy wygląd w programie pocztowym
- Szukasz programisty PHP dla e-commerce?