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ć.