Inserimento di contenuti dinamici in una pagina
Vedo che questo argomento emerge regolarmente ma non ho ancora trovato una risposta al mio specifico requisito.
Sto cercando di utilizzare una pagina WordPress come template e inserire contenuti provenienti dal database (circa 20 campi di testo, inclusi nomi di file immagine) basati su un ID passato come parametro URL (e indice del mio database). Ad esempio www.example.com/examplepage/?pid=123
Prima di WordPress, potevo farlo facilmente in PHP eseguendo del codice per ottenere un record dal database e poi scrivendo HTML intervallato con quei campi.
Ho un plugin in WordPress che mi permette di eseguire alcuni snippet di codice PHP nella pagina, ma questi sono nel corpo della pagina e credo che l'header sia già stato scritto. L'header ha campi come il titolo e la meta descrizione che vorrei fossero popolati da contenuti dinamici.
Ho visto plugin per la gestione CMS di annunci immobiliari, film, ecc. ma la mia gestione del database è un po' insolita quindi devo adottare un approccio personalizzato.
Capisco che potrei dover lavorare nello script functions.php del mio tema per approfondire il rendering delle pagine di WordPress, ma vorrei fare attenzione a non disturbare le pagine/post generali del mio sito. È solo questa pagina speciale che accetterà parametri e caricherà il contenuto appropriato.
Qualsiasi consiglio sui passaggi da seguire sarebbe molto apprezzato.

Mentre stai costruendo un template di pagina, puoi inserire nel contenuto di quel template tutto ciò che desideri e utilizzare qualsiasi snippet PHP tu voglia. Quindi, puoi continuare a farlo come facevi in PHP. Ad esempio, questo potrebbe essere il tuo template di pagina:
<?php
/*
Template Name: Il mio template
*/
get_header();
?>
<main>
<?php
if( isset( $_GET['pid'] ) ) {
// Popola qui il tuo contenuto dinamico
}
?>
</main>
<?php get_footer(); ?>
Ma hai ragione riguardo al titolo e ai meta tag del documento, potrebbero essere già impostati. Qui devi agganciarti al filtro wp_title
e all'azione wp_head
, utilizzando la funzione is_page_template
per verificare se ti trovi nel template di pagina.
Ad esempio, supponi che il nome del tuo file del template di pagina sia qualcosa come page-mytemplate.php
e che si trovi nella root del tuo tema:
add_filter( 'wp_title', function( $title, $sep ) {
if( is_page_template( 'page-mytemplate.php' ) ) {
// Modifica qui il $title
$title = 'il mio nuovo titolo';
}
return $title;
}, 10, 2 );
add_action( 'wp_head', function() {
if( is_page_template( 'page-mytemplate.php' ) ) {
// Stampa i tuoi meta tag qui
echo '<meta name=....>';
}
} );
Il problema
C'è un grosso problema con i tag <meta>
. WordPress non ha un modo standard per gestire i tag <meta>
del documento. Se utilizzi un plugin che aggiunge tag <meta>
, non sarai in grado di sovrascriverli a meno che il plugin non offra un modo per farlo.
Riferimenti

Grazie per quello. Ho trovato un riferimento ai template di pagina di WordPress e proverò a utilizzarli. Riguardo alle tue note sui tag <meta>, sospetto che il mio plugin Yoast potrebbe interferire. Vorrei votare positivamente ma sono un novizio e non ho ancora i privilegi di voto!

Mi dispiace ma non ti capisco. Hai detto che stavi usando un template di pagina, quindi ho presupposto che sapessi come creare un template di pagina; non capisco cosa intendi ora con il riferimento ai template di pagina. Penso di aver risposto esattamente a ciò che hai chiesto, quindi credo che la mia risposta dovrebbe essere accettata; se non è così, per favore dimmi perché questa risposta non soddisfa la tua domanda. A proposito: la tua reputazione attuale è sufficiente per accettare risposte.

Forse ti ho frainteso. Hai detto "usa una pagina WordPress come template" e io pensavo ti riferissi ai template di pagina di WordPress; ecco perché ho iniziato la risposta con "Dato che stai creando un template di pagina".

Scusa... sono nuovo su StackExchange e pensavo che votare fosse un segno di approvazione. Ora ho trovato il segno di spunta. Hai ragione sul fatto che ho usato la parola "template" in modo generico nella mia domanda, ma ora vedo che la soluzione migliore per me sarebbe usare un "Modello di pagina specializzato" di WordPress che funziona per una pagina specifica. Posso facilmente integrare il mio lavoro con il database PHP lì dentro. Sarebbe bello mantenere il layout design nella pagina e inserire i miei campi del database... sospetto che gli shortcode possano essere utili per questo? Grazie ancora per la risposta esaustiva.

Poiché un template di pagina è un file PHP, puoi costruirlo come preferisci. Con o senza shortcode. Usa gli shortcode se vuoi mostrare le informazioni anche altrove, non solo nel template di pagina. Voglio dire, potresti usare una funzione PHP nel template di pagina e usare quella stessa funzione come callback per uno shortcode; ma gli shortcode non sono affatto obbligatori per un template di pagina. Qui puoi vedere come uno shortcode sia semplicemente un segnaposto per una funzione PHP e come puoi usarli separatamente.

Grazie cybmeta. Ho fatto funzionare un template personalizzato e ho scelto di implementare il layout della pagina nella pagina stessa. Gli shortcode si sono rivelati utili per impostare i campi calcolati/del database e posizionarli nel contenuto della pagina. Il mio unico problema è impostare il titolo della pagina e la meta description usando add_filter(). Sto usando Genesis e sospetto che gli elementi SEO stiano interferendo. Chiederò riguardo a questo in un altro post.

Ho aggiornato la risposta, il codice era sbagliato. Adesso dovrebbe funzionare (l'ho testato e uso codice simile in diversi siti web). Sfortunatamente non posso aiutarti con Genesis in quanto è un software di terze parti che non conosco; prova a testare il codice senza Genesis per vedere se il problema è un conflitto con Genesis o meno.

Forse mi sfugge qualcosa, ma:
Se ti serve solo il 'pid' ad esempio e fa parte dell'URL allora è abbastanza semplice?
Nel template della pagina 'examplepage' basta fare:
$mypid = $_GET['pid'];
e poi procedere con la query SQL basata su quel valore e mostrare una risposta.
Se vuoi qualcosa di più basato su ajax, quando l'utente arriva su 'examplepage' prendi il 'pid' e aggiungilo come classe o attributo data su un div vuoto. Ad esempio chiamato: 'results-container'
<?php $mypid = $_GET['pid']; ?>
<div class"results-container" mypid="<?php echo $mypid; ?>"></div>
E poi fai eseguire uno script js al caricamento del documento che legge l'attributo mypid su quel div e fa una fetch separata. In questo modo la pagina può caricarsi e mostrare uno stato di 'caricamento' e qualche contenuto preliminare mentre i risultati vengono caricati.
Spero abbia senso.
-Scritto con dita grasse su un telefono! aaaaah.

Ho fatto questo lavoro recentemente. Potrebbe essere un po' in ritardo, ma nel caso altri volessero sapere come fare, questi sono stati i miei passaggi in un ambiente WordPress:
Crea una funzione che legga il parametro URL, come:
function details_Page($atts) { global $wpdb; // Ottieni il record del database per questi dettagli $DatabaseId = $_GET['pid']; if(!is_numeric ($DatabaseId)) { // VAI ALLA PAGINA DI ERRORE. LA PAGINA NON È VALIDA. header('Location: /pagina-non-trovata/'); return; } GENERA QUI IL TUO CODICE DI PAGINA }
Ora crea uno shortcode per questa funzione o usala nel tuo template di pagina. Funzionalmente parlando, questo è un altro modo per creare un template di pagina.
add_shortcode('DETAILS_PAGE', 'details_Page');
Ora aggiungi lo shortcode alla pagina specificamente definita (o al template).
Per modificare l'header in base ai tuoi dati, assicurati che la chiamata add_action sia nel loop principale o in functions.php. Altrimenti avrai una condizione di competizione.
add_action( 'wp_head', 'MMD_listings_add_custom_meta', 10 );
function add_custom_meta()
{
$slug = basename(get_permalink()); // Lo uso per la pagina specifica
if( $slug == 'dettagli')
{
$Name = $_GET[ 'Name' ];
$Desc = $_GET[ 'Desc' ];
$Logo = $_GET[ 'Logo' ];
?>
<meta content="<?php echo $Name; ?>>"/>
<meta content="<?php echo $Desc; ?>">
<?PHP
}
}
