wp query – Jak wyszukiwać posty według tytułu ze znakami specjalnymi w WP_Query?
Zbudowałem niestandardowe zapytanie dla witryny, w której mam niestandardowy typ postu o nazwie „Program” (tj.).
W przypadku tego niestandardowego typu postu powiedzmy, że mam „Poziom” taksonomii, w którym mam kilka możliwości wyboru. Sposób, w jaki zbudowałem kod, pozwala stworzyć dowolną liczbę stron o tym samym tytule, ale z różnymi taksonomiami. Na froncie używam niestandardowego WP_Query, aby pobrać wszystkie posty o tym samym tytule i wyświetlić menu, aby połączyć je wszystkie na podstawie „Poziomów”.
Ale problem polega na tym, że klient może wprowadzić tytuł ze specjalnymi znakami jako '
tak jak Custom's title
.
Moja prośba wygląda tak.
wp_reset_postdata();
// WP_Query arguments
$args = array(
'post_type' => 'program',
'title' => esc_sql(get_the_title()),
'orderby' => 'ID',
'order' => 'ASC',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'level',
'field' => 'slug',
'terms' => array('level-one', 'level-two', 'level-three'),
)
)
);
// The Query
$breadcrumb = new WP_Query( $args );
Wszystko jest w porządku, gdy zapytanie wyszukuje według tytułu bez '
. Psuje się, gdy próbuję wyszukać według tytułu za pomocą '
.
Wygląda na to, że przerywa to zapytanie SQL, w wyniku czego liczba postów wynosi 0.
Czy istnieje sposób na utworzenie rodzaju filtra, który może powiedzieć %LIKE%, w którym mógłbym po prostu wziąć część tytułu lub po prostu coś innego, co może ominąć '
?
Uwaga: nie mogę użyć name
parametr ( bo jak widać mam ten sam tytuł dla wielu postów więc ślimak wygląda tak
my-program-post
my-program-post-2
my-program-post-3
Ślimak nie graniczy ze mną, ponieważ jest przeznaczony do użytku wewnętrznego.
Z góry dziękuję. W międzyczasie będę szukać pracy w okolicy.
EDYCJA 1: Dodatkowe szczegóły
Jeśli przyjrzysz się bliżej wygenerowanemu zapytaniu, mam to.
SELECT SQL_CALC_FOUND_ROWS ri_posts.* FROM ri_posts LEFT JOIN ri_term_relationships ON (ri_posts.ID = ri_term_relationships.object_id) WHERE 1=1 AND ri_posts.post_title="Domaine de l’univers social" AND (
ri_term_relationships.term_taxonomy_id IN (5,6,7)
) AND ri_posts.post_type="discipline" AND (ri_posts.post_status="publish" OR ri_posts.post_status="acf-disabled" OR ri_posts.post_status="private") GROUP BY ri_posts.ID ORDER BY ri_posts.ID ASC LIMIT 0, 999
Jak widać, wygląda na to, że WordPress zmienił mój '
Do ’
więc otrzymuję 0 postów z mojego zapytania.
Jeśli ręcznie zmienię to na:
SELECT SQL_CALC_FOUND_ROWS ri_posts.* FROM ri_posts LEFT JOIN ri_term_relationships ON (ri_posts.ID = ri_term_relationships.object_id) WHERE 1=1 AND ri_posts.post_title = "Domaine de l'univers social" AND (
to działa.
ri_term_relationships.term_taxonomy_id IN (5,6,7)
) AND ri_posts.post_type="discipline" AND (ri_posts.post_status="publish" OR ri_posts.post_status="acf-disabled" OR ri_posts.post_status="private") GROUP BY ri_posts.ID ORDER BY ri_posts.ID ASC LIMIT 0, 999
Próbowałem też utworzyć filtry %LIKE% lub str_replace
działa, ale nic nie działa. Zawsze to zwraca ’
charakter.