Verifică dacă există Slug-ul Paginii, apoi afișează Titlul acelei Pagini

17 mar. 2016, 03:23:58
Vizualizări: 25.4K
Voturi: 0

Am găsit această funcție pentru a verifica dacă o pagină există după slug-ul său și funcționează excelent

function the_slug_exists($post_name) {
global $wpdb;
if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $post_name . "'", 'ARRAY_A')) {
    return true;
} else {
    return false;
}

}

dar acum am nevoie să verific dacă există și să afișez titlul pentru acea pagină, orice ajutor este apreciat.

așa că atunci când pun acest cod pe pagină pentru a căuta slug-ul:

<?php if (the_slug_exists('page-name')) {
                    echo '$post_title';
} ?>

totul este perfect, cu excepția faptului că am nevoie ca funcția să afișeze și titlul, pe lângă căutarea slug-ului, sper că are mai mult sens așa.

1
Comentarii

În general, funcțiile cu prefixul the_ afișează (echo) rezultatul, iar cele cu prefixul get_ returnează valoarea

Pieter Goosen Pieter Goosen
17 mar. 2016 06:28:00
Toate răspunsurile la întrebare 3
4

analizând interogarea MySQL din funcție, devine clar că deși se potrivește cu post_name și returnează true sau false. Ceea ce doriți să aflați este dacă o pagină există după slug-ul ei. Deci, în acest caz, funcția pe care ați ales-o este greșită.

Pentru a obține pagina după titlu puteți folosi simplu:

$page = get_page_by_title( 'Pagina Exemplu' );
echo $page->title

În cazul în care doriți să obțineți pagina după slug, puteți utiliza următorul cod:

function get_page_title_for_slug($page_slug) {

     $page = get_page_by_path( $page_slug , OBJECT );

     if ( isset($page) )
        return $page->post_title;
     else
        return "Nu s-a găsit nicio potrivire";
}

Puteți apela funcția de mai sus astfel:

echo "<h1>" . get_page_title_for_slug("pagina-exemplu") . "</h1>";

Spuneți-mi dacă vă ajută.

17 mar. 2016 05:11:52
Comentarii

În general, funcțiile prefixate cu the_ afișează output-ul, iar cele prefixate cu get_ returnează

Pieter Goosen Pieter Goosen
17 mar. 2016 06:27:54

deci cum aș putea apela această funcție pe o pagină pentru a verifica dacă slug-ul există și apoi să afișez titlul paginii pe care tocmai am verificat-o?

John Carlos John Carlos
17 mar. 2016 06:50:05

Mulțumesc Pieter. Am făcut modificările necesare. @JohnCarlos - Am adăugat apelul funcției la sfârșitul răspunsului meu.

Prasad Nevase Prasad Nevase
17 mar. 2016 10:47:08

Ceea ce acest răspuns și celelalte nu menționează este că funcția get_page_by_path face literalmente ceea ce spune. Dacă îi transmiți un slug de pagină pentru o pagină cu un părinte, aceasta nu va funcționa!. Atunci trebuie să îi transmiți parent_slug/page_slug. Dar toți presupuneți că nu există pagini părinte.

NextGenThemes NextGenThemes
25 iun. 2020 20:27:28
1

Aproape întotdeauna nu este recomandat să rulezi interogări SQL personalizate atunci când WordPress are funcții native pentru a efectua o anumită acțiune. Slug-ul sau post_name al unei pagini este utilizat și în calea (URL) paginii pentru a identifica și returna conținutul acelei pagini atunci când este vizitată. Aceasta înseamnă că putem folosi get_page_by_path() și doar să transmitem slug-ul (post_name) funcției pentru a obține obiectul paginii returnat.

get_page_by_path ( 
    string $page_path, 
    string $output = OBJECT, 
    string|array $post_type = 'page' 
)

Ca multe alte funcții și convenții de denumire (cum ar fi post_name, care este de fapt slug-ul și nu numele) în WordPress, numele get_page_by_path() este confuz și, în opinia mea, prost ales, deoarece poți transmite orice tip de postare funcției.

Putem folosi get_page_by_path(), care nu va returna nimic dacă pagina nu este găsită sau obiectul paginii în caz de succes. Să scriem o funcție wrapper corectă care va returna false în caz de eșec și va returna întotdeauna obiectul paginii, indiferent dacă aceasta există sau nu.

function get_post_by_post_name( $slug = '', $post_type = '' )
{
    // Asigură-te că avem valori setate pentru $slug și $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // Nu vom face sanitizarea input-ului, deoarece get_page_by_path() se va ocupa de asta
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

    return $post_object;
}

Poți să o folosești astfel:

if ( function_exists( 'get_post_by_post_name' ) ) {
    $post_object = get_post_by_post_name( 'post-name-better-known-as-slug', 'your_desired_post_type' );
    // Afișează doar dacă avem o postare validă 
    if ( $post_object ) {
        echo apply_filters( 'the_title', $post_object->post_title );
    }
}

Dacă ai nevoie doar de titlul postării returnat, putem modifica ușor funcția:

function get_post_title_by_post_name( $slug = '', $post_type = '' )
{
    // Asigură-te că avem valori setate pentru $slug și $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // Nu vom face sanitizarea input-ului, deoarece get_page_by_path() se va ocupa de asta
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

    return apply_filters( 'the_title', $post_object->post_title );
}

și apoi să o folosești astfel:

if ( function_exists( 'get_post_title_by_post_name' ) ) {
    $post_title = get_post_title_by_post_name( 'post-name-better-known-as-slug', 'your_desired_post_type' );
    // Afișează doar dacă avem o postare validă 
    if ( $post_title ) {
        echo $post_title;
    }
}
17 mar. 2016 09:46:51
Comentarii

Nu funcționează, am o pagină cu un slug dar funcția returnează false.

NextGenThemes NextGenThemes
25 iun. 2020 20:17:52
2

Iată o actualizare a aceluiași cod pentru tine

function the_slug_exists($post_name) {
global $wpdb;
//Sanitize title
$post_name = sanitize_title($post_name);
if($wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $post_name . "'", 'ARRAY_A')) {
    return $post_name;
} else {
    return false;
}

apoi poți să-l rulezi simplu prin apelarea lui cu funcția echo ca în codul următor, care va afișa doar numele postului dacă acesta există.

echo the_slug_exists($post_name); 

ACTUALIZARE

Alternativ, poți folosi funcția condițională implicită din WordPress is_page(), astfel codul tău devine la fel de simplu ca mai jos..

if( is_page($post_name) ):

   echo $post_name; 

endif;
17 mar. 2016 04:40:51
Comentarii

În general, funcțiile prefixate cu the_ afișează output-ul, iar cele prefixate cu get_ returnează

Pieter Goosen Pieter Goosen
17 mar. 2016 06:27:07

se pare că acest lucru afișează doar slug-ul articolului 'post_name' când eu am nevoie să afișez titlul articolului (post_title), iar condiția if is_page va funcționa doar dacă sunt efectiv pe acea pagină, nu ca o verificare pentru a vedea dacă există

John Carlos John Carlos
17 mar. 2016 06:44:26