Tworzymy funkcje pozwalające nam przekazać tytuł albo slug strony, które zwracają adres tej strony. Uczymy się dzięki temu podstaw WP Query bądź je przypominamy.
Link do strony po tytule tejże – WP Query
Kiedyś istniała funkcja get_page_by_title, ale dzisiaj już jest przestarzała według najnowszej dokumentacji. A wynik takiej funkcji można było wrzucić w get_permalink, następnie w esc_url i zrobić na nim echo.
Tutaj musimy wszystko napisać sami. Zaczynamy:
function page_link_by_title($title) {
$query = new WP_Query(
array(
'post_type' => 'page',
'title' => $title,
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
)
);
}
Funkcja przyjmuje tytuł i po tytule wyszukuje. Typ postu to page, czyli strona. Pobiera tylko jedną stronę. Istnieje możliwość, że nie zwróci żadnego wyniku.
Teraz pora na wyświetlenie linku:
function page_link_by_title($title) {
$query = new WP_Query(
array(
'post_type' => 'page',
'title' => $title,
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
)
);
if ( ! empty( $query->post ) ) {
echo esc_url(get_permalink($query->post));
}
else {
echo "#";
}
}
Echo na esc_url, get_permalink, do którego przekazujemy znalezisko z WP Query. Jeżeli nic nie znaleziono, niech pusty hasz wyświetli (wynik funkcji będzie wyświetlany w atrybucie href tagu <a>).
Znajdź po slugu – bardzo podobna sytuacja
Znajdywanie po slugu wygląda niemal identycznie:
function page_link_by_slug($slug) {
$query = new WP_Query(
array(
'post_type' => 'page',
'slug' => $slug,
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
'update_post_term_cache' => false,
'update_post_meta_cache' => false,
)
);
if ( ! empty( $query->post ) ) {
echo esc_url(get_permalink($query->post));
}
else {
echo "#";
}
}
Musimy tylko pamiętać, że tych funkcji inaczej będziemy używać:
<?php page_link_by_title('O nas');?>
<?php page_link_by_slug('o-nas');?>
Jak wiemy czym jest slug problemu mieć nie będziemy.
W WordPressie mamy też funkcję get_page_by_path, która przestarzała (na chwilę obecną) nie jest, to warto odnotować.