WordPress

wp query – Jak wyszukiwać posty według tytułu ze znakami specjalnymi w WP_Query?

  • 19 grudnia, 2018
  • 3 min read
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.

Warto przeczytać!  Ustawienia wstępne i szablony w chmurze Forminatora

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 (
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
to działa.

Warto przeczytać!  Jak wyświetlić przyszłe nadchodzące zaplanowane posty w WordPress

Próbowałem też utworzyć filtry %LIKE% lub str_replace działa, ale nic nie działa. Zawsze to zwraca charakter.


Źródło