Inserarea conținutului dinamic într-o pagină
Văd că acest subiect apare frecvent, dar nu am găsit încă un răspuns pentru cerința mea specifică.
Încerc să folosesc o pagină WordPress ca șablon și să inserez conținut din baza de date (aproximativ 20 de câmpuri text, inclusiv nume de fișiere imagine) bazat pe un ID transmis ca parametru URL (și index în baza mea de date). De exemplu www.example.com/examplepage/?pid=123
Înainte de WordPress, puteam face acest lucru ușor în PHP executând cod pentru a obține o înregistrare din baza de date și apoi afișând HTML intercalat cu acele câmpuri.
Am un plugin în WordPress care îmi permite să execut fragmente de cod PHP în pagină, dar acestea sunt în corpul paginii și cred că header-ul a fost deja generat. Header-ul conține câmpuri precum titlu și meta description pe care aș dori să le populez cu conținut dinamic.
Am văzut plugin-uri pentru gestionarea tip CMS a listărilor imobiliare, filme etc., dar gestionarea bazei mele de date este puțin neobișnuită, așa că trebuie să adopt o abordare personalizată.
Înțeleg că ar putea fi nevoie să lucrez în scriptul functions.php al temei mele pentru a accesa procesul de randare WordPress, dar aș vrea să fiu atent să nu perturb paginile/postările generale de pe site. Este vorba doar despre această pagină specială care va accepta parametri și va încărca conținutul corespunzător.
Orice sfat despre pașii pe care trebuie să îi urmez ar fi foarte apreciat.

Când construiești un șablon de pagină, poți insera în conținutul acelui șablon orice dorești și poți folosi orice fragment de cod PHP. Astfel, poți continua să faci așa cum ai făcut în PHP. De exemplu, acesta ar putea fi șablonul tău de pagină:
<?php
/*
Template Name: Șablonul meu
*/
get_header();
?>
<main>
<?php
if( isset( $_GET['pid'] ) ) {
// Populează conținutul dinamic aici
}
?>
</main>
<?php get_footer(); ?>
Dar ai dreptate în legătură cu titlul și meta tag-urile documentului, acestea pot fi deja setate. Aici trebuie să folosești filtrul wp_title
și acțiunea wp_head
, utilizând funcția is_page_template
pentru a verifica dacă te afli în șablonul de pagină.
De exemplu, să presupunem că fișierul șablonului tău de pagină se numește page-mytemplate.php
și este localizat în rădăcina temei tale:
add_filter( 'wp_title', function( $title, $sep ) {
if( is_page_template( 'page-mytemplate.php' ) ) {
// Modifică $title aici
$title = 'titlul meu nou';
}
return $title;
}, 10, 2 );
add_action( 'wp_head', function() {
if( is_page_template( 'page-mytemplate.php' ) ) {
// Afișează/print meta tag-urile tale aici
echo '<meta name=....>';
}
} );
Problema
Există o mare problemă cu tag-urile <meta>
. WordPress nu are o metodă standard pentru a gestiona tag-urile <meta>
ale documentului. Dacă folosești orice plugin care adaugă tag-uri <meta>
, nu vei putea să le suprascrii decât dacă plugin-ul oferă o modalitate de a face acest lucru.
Referințe

Mulțumesc pentru asta. Am găsit o referință la șabloanele de pagină WordPress și voi încerca asta. Referitor la notele tale despre tag-urile <meta>, bănuiesc că plugin-ul meu Yoast va interfera. Aș vota ++ dar sunt începător și nu am încă dreptul de vot!

Îmi pare rău, dar nu te înțeleg. Ai spus că folosești un șablon de pagină, așa că am presupus că știi cum să construiești un șablon de pagină; nu înțeleg ce spui acum despre o referință la șabloanele de pagină. Cred că am răspuns exact la ceea ce ai întrebat, așa că cred că răspunsul meu ar trebui marcat ca acceptat; dacă nu, te rog să-mi spui de ce acest răspuns nu răspunde întrebării tale. Apropo: reputația ta actuală este suficientă pentru a accepta răspunsuri.

Poate te-am înțeles greșit. Ai spus "folosește o pagină WordPress ca șablon" și am crezut că te referi la șabloanele de pagină WordPress; de aceea am început răspunsul cu "Deoarece construiești un șablon de pagină".

Scuze... sunt nou pe StackExchange și am presupus că votul înseamnă aprobare. Am descoperit acum bifa/markul de verificare. Ai dreptate că am folosit cuvântul "șablon" generic în întrebarea mea, dar acum înțeleg că cea mai bună soluție pentru mine ar fi să folosesc un "Șablon de Pagină Specializat" WordPress, care funcționează pentru o anumită pagină. Pot să integrez ușor logica PHP pentru baza de date acolo. Ar fi frumos să păstrez designul layout-ului în pagină și să injectez câmpurile din baza de date... Bănuiesc că shortcode-urile ar putea fi soluția? Mulțumesc din nou pentru răspunsul detaliat.

Deoarece un șablon de pagină este un fișier PHP, îl poți construi așa cum dorești. Cu sau fără shortcode-uri. Folosește shortcode-uri dacă vrei să afișezi informații și în alte locuri, nu doar în șablonul de pagină. Adică, ai putea folosi o funcție PHP în șablonul de pagină și să folosești aceeași funcție ca și callback pentru un shortcode; dar shortcode-urile nu sunt obligatorii pentru un șablon de pagină. Aici poți vedea cum un shortcode este doar un substituent pentru o funcție PHP și cum le poți folosi separat.

Mulțumesc cybmeta. Am reușit să implementez un șablon personalizat și am ales să realizez layout-ul paginii în pagina însăși. Shortcode-urile s-au dovedit utile pentru configurarea câmpurilor din baza de date/calculate și plasarea lor în conținutul paginii. Singura mea problemă este setarea titlului paginii și a meta descrierii folosind add_filter(). Folosesc Genesis și bănuiesc că elementele SEO interferează. Voi întreba despre asta într-un alt post.

Am actualizat răspunsul, codul era greșit. Acum ar trebui să funcționeze (am testat și folosesc un cod similar pe mai multe site-uri). Din păcate, nu vă pot ajuta cu Genesis deoarece este un software de la terți pe care nu îl cunosc; încercați să testați codul fără Genesis pentru a vedea dacă problema este un conflict cu Genesis sau nu.

Poate îmi scapă ceva, dar:
Dacă ai nevoie doar de 'pid' de exemplu și acesta face parte din URL, atunci este destul de simplu?
În șablonul de pagină 'examplepage', pur și simplu folosește:
$mypid = $_GET['pid'];
apoi continuă cu interogarea SQL bazată pe această valoare și afișează un răspuns.
Dacă dorești ceva mai bazat pe AJAX, atunci când utilizatorul ajunge pe 'examplepage', ia 'pid' și adaugă-l ca clasă sau atribut data pe un div gol. De exemplu, numit: 'results-container'
<?php $mypid = $_GET['pid']; ?>
<div class="results-container" mypid="<?php echo $mypid; ?>"></div>
Apoi, folosește un script JS care se execută la încărcarea documentului și citește atributul mypid de pe acel div, efectuând o cerere separată. În acest fel, pagina se poate încărca și poate afișa o stare de 'se încarcă' și un conținut preliminar în timp ce rezultatele se încarcă.
Sper că a fost clar.
-Scris cu degete groase pe un telefon mobil! Aaaaah.

Am făcut acest lucru chiar recent. Poate că vin târziu la petrecere, dar în cazul în care alții vor să știe cum, iată pașii pe care i-am urmat într-un mediu WordPress:
Creează o funcție care citește parametrul din URL, cum ar fi:
function details_Page($atts) { global $wpdb; // Obține înregistrarea din baza de date pentru aceste detalii $DatabaseId = $_GET['pid']; if(!is_numeric ($DatabaseId)) { // REDIRECȚIONEAZĂ CĂTRE PAGINA DE LIPSA. PAGINA NU ESTE VALIDĂ. header('Location: /missing-page/'); return; } GENEREAZĂ CODUL TĂU DE PAGINĂ AICI }
Acum creează un shortcode pentru această funcție sau folosește-o în șablonul tău de pagină. Din punct de vedere funcțional, aceasta este o altă modalitate de a face un șablon de pagină.
add_shortcode('DETAILS_PAGE', 'details_Page');
Acum adaugă shortcode-ul la pagina definită în mod specific (sau la șablon).
Pentru a modifica header-ul pentru a se potrivi cu datele tale, asigură-te că apelul add_action este în bucla principală sau în functions.php. Altfel, vei avea o condiție de cursă.
add_action( 'wp_head', 'MMD_listings_add_custom_meta', 10 );
function add_custom_meta()
{
$slug = basename(get_permalink()); // Folosesc pentru pagina particulară
if( $slug == 'details')
{
$Name = $_GET[ 'Name' ];
$Desc = $_GET[ 'Desc' ];
$Logo = $_GET[ 'Logo' ];
?>
<meta content="<?php echo $Name; ?>>"/>
<meta content="<?php echo $Desc; ?>">
<?PHP
}
}
