Verifică dacă există Slug-ul Paginii, apoi afișează Titlul acelei Pagini
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.

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

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

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?

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

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.

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;
}
}

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;

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