Verifica se lo Slug della Pagina Esiste e Mostra il Titolo della Pagina

17 mar 2016, 03:23:58
Visualizzazioni: 25.4K
Voti: 0

Mi sono imbattuto in questa funzione per verificare se una pagina esiste tramite il suo slug e funziona alla perfezione

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

}

ma ora quello che devo fare è verificare se esiste e poi mostrare il titolo di quella pagina, ogni aiuto è apprezzato.

quindi quando metto questo codice sulla pagina per cercare lo slug:

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

tutto è perfetto tranne il fatto che ho bisogno che la funzione mostri anche il titolo oltre a cercare lo slug, spero che così abbia più senso.

1
Commenti

In generale, le funzioni con prefisso the_ emettono il loro output mentre quelle con prefisso get_ restituiscono

Pieter Goosen Pieter Goosen
17 mar 2016 06:28:00
Tutte le risposte alla domanda 3
4

Osservando la query MySQL nella funzione diventa chiaro che, sebbene corrisponda al post_name e restituisca vero o falso, quello che vuoi trovare è se una pagina esiste tramite il suo slug. In questo caso, la funzione che hai scelto è sbagliata.

Per ottenere la pagina dal titolo puoi semplicemente usare:

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

Nel caso in cui tu voglia ottenere la pagina dallo slug, puoi usare il seguente codice:

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 "Nessuna corrispondenza trovata";
}

Puoi chiamare la funzione sopra in questo modo:

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

Fammi sapere se ti è stato utile.

17 mar 2016 05:11:52
Commenti

In generale, le funzioni con prefisso the_ visualizzano direttamente l'output, mentre quelle con prefisso get_ restituiscono il valore

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

quindi come dovrei chiamare questa funzione in una pagina per verificare se esiste quello slug e poi visualizzare il titolo della pagina che ho appena cercato?

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

Grazie Pieter. Ho apportato le modifiche necessarie. @JohnCarlos - Ho aggiunto la chiamata alla funzione alla fine della mia risposta.

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

Ciò che questa e le altre risposte non menzionano è che la funzione get_page_by_path fa letteralmente quello che dice. Se le passi uno slug di una pagina con un genitore non funzionerà!. In questo caso devi passargli parent_slug/slug_pagina. Ma tutti voi date per scontato che non ci siano pagine genitore.

NextGenThemes NextGenThemes
25 giu 2020 20:27:28
1

Quasi sempre è sconsigliato eseguire SQL personalizzato quando WordPress dispone di funzioni native per svolgere un determinato compito. Lo slug o post_name di una pagina viene anche utilizzato nel percorso (URL) della pagina per identificare e restituire il contenuto di quella pagina quando viene visitata. Ciò significa che possiamo utilizzare get_page_by_path() e semplicemente passare lo slug (post_name) alla funzione per ottenere l'oggetto pagina restituito.

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

Come molte altre funzioni e convenzioni di denominazione (come post_name che in realtà è lo slug, e non il nome) in WordPress, il nome di get_page_by_path() è confuso e IMHO stupido dato che puoi passare qualsiasi tipo di post alla funzione.

Possiamo usare get_page_by_path() che restituirà nulla se la pagina non viene trovata, o l'oggetto pagina in caso di successo. Scriviamo una funzione wrapper corretta che restituirà false in caso di fallimento e restituirà sempre l'oggetto pagina indipendentemente dall'esistenza della pagina.

function get_post_by_post_name( $slug = '', $post_type = '' )
{
    // Assicurati che siano impostati valori per $slug e $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // Non sanitizzeremo l'input poiché get_page_by_path() gestirà ciò
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

    return $post_object;
}

Puoi quindi usarla come segue

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' );
    // Output solo se abbiamo un post valido 
    if ( $post_object ) {
        echo apply_filters( 'the_title', $post_object->post_title );
    }
}

Se hai davvero bisogno solo del titolo del post restituito, possiamo modificare leggermente la funzione.

function get_post_title_by_post_name( $slug = '', $post_type = '' )
{
    // Assicurati che siano impostati valori per $slug e $post_type
    if (    !$slug
         || !$post_type
    )
        return false;

    // Non sanitizzeremo l'input poiché get_page_by_path() gestirà ciò
    $post_object = get_page_by_path( $slug, OBJECT, $post_type );

    if ( !$post_object )
        return false;

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

e poi usarla come segue

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' );
    // Output solo se abbiamo un post valido 
    if ( $post_title ) {
        echo $post_title;
    }
}
17 mar 2016 09:46:51
Commenti

Non funziona, ho una pagina con uno slug ma la funzione restituisce false.

NextGenThemes NextGenThemes
25 giu 2020 20:17:52
2

Ecco un aggiornamento dello stesso codice per te

function the_slug_exists($post_name) {
global $wpdb;
//Sanitizza il titolo
$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;
}

Quindi puoi eseguirla semplicemente chiamandola con la funzione echo come nel seguente codice, che stamperà solo il nome del post se esiste.

echo the_slug_exists($post_name); 

AGGIORNAMENTO

In alternativa puoi utilizzare la funzione condizionale predefinita di WordPress is_page(), quindi il tuo codice diventa semplice come segue..

if( is_page($post_name) ):

   echo $post_name; 

endif;
17 mar 2016 04:40:51
Commenti

In generale, le funzioni con prefisso the_ emettono in output il loro risultato mentre quelle con prefisso get_ lo restituiscono

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

sembra che questo restituisca solo lo slug del post 'post_name' quando invece ho bisogno di emettere il titolo del post e l'if is_page funzionerà solo se mi trovo effettivamente su quella pagina, non come controllo per verificare se esiste

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