web-dev-qa-db-fra.com

Insertion de contenu dynamique dans une page

Je vois ce sujet régulièrement, mais je n'ai pas encore trouvé de réponse à mes besoins spécifiques.

J'essaie d'utiliser une page WordPress comme modèle et d'insérer du contenu provenant d'une base de données (environ 20 champs de texte, y compris les noms de fichiers d'image) en fonction d'un ID transmis en tant que paramètre d'URL (et indexé dans ma base de données). par exemple. www.example.com/examplepage/?pid=123

Avant WordPress, je pouvais le faire facilement dans PHP en exécutant du code pour obtenir un enregistrement de base de données, puis en écrivant du code HTML entrecoupé de ces champs.

J'ai un plugin dans WordPress qui me permet de faire des extraits de code PHP sur la page, mais cela se trouve dans le corps de la page et je crois que l'en-tête a déjà été écrit. L'en-tête contient des champs tels que title et meta desc que j'aimerais que le contenu dynamique remplisse.

J'ai déjà vu des plug-ins pour la gestion des listes de biens immobiliers, des films, etc. de type CMS, mais la gestion de ma base de données est inhabituelle et je dois donc adopter une approche de génération personnalisée.

Je comprends que j’aurai peut-être besoin de travailler dans le script functions.php de mon thème pour pouvoir accéder au rendu de la page WordPress, mais j’aimerais faire attention à ne pas perturber les pages/publications générales sur mon site. C'est juste cette page spéciale qui accepte un paramètre et charge le contenu approprié.

Quelques conseils sur les mesures que je dois prendre seraient les plus appréciés.

3
Warren Vick

Lorsque vous créez un modèle de page, vous pouvez insérer ce que vous voulez dans le contenu de ce modèle et utiliser n’importe quel extrait de codePHP. Ainsi, vous pouvez continuer à le faire comme vous le faisiez en PHP. Par exemple, ceci pourrait être votre modèle de page:

<?php
/*
Template Name: My template
*/
get_header();

?>
<main>

    <?php

    if( isset( $_GET['pid'] ) ) {

        // Populate your dynamic content here

    }

    ?>


</main>
<?php get_footer(); ?>

Mais vous avez raison en ce qui concerne le titre et les balises META du document, elles sont peut-être déjà définies. Ici, vous devez vous connecter au filtre wp_title et à l'action wp_head, à l'aide de la fonction is_page_template pour vérifier si vous vous trouvez dans le modèle de page.

Par exemple, supposons que votre nom de fichier tempalte de page ressemble à page-mytemplate.php et qu'il se trouve à la racine de votre thème:

add_filter( 'wp_title', function( $title, $sep ) {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Modify the $title here
        $title = 'my new title';

    }

    return $title;

}, 10, 2 );

add_action( 'wp_head', function() {

    if( is_page_template( 'page-mytemplate.php' ) ) {

        // Echo/print your meta tags here
        echo '<meta name=....>';

    }

} );

Le problème

Ils posent un gros problème avec les balises <meta>. WordPress n'a pas de méthode standard pour gérer les balises <meta> du document. Si vous utilisez un plug-in qui ajoute des balises <meta>, vous ne pourrez pas les remplacer à moins que le plug-in offre un moyen de le faire.

Référence

3
cybmeta

Il se peut que je manque quelque chose mais:

Si vous avez seulement besoin du 'pid' par exemple et qu'il fait partie de l'URL, alors c'est assez simple?

Dans le modèle de page 'examplepage', faites simplement un:

$mypid = $_GET['pid'];

dans là et ensuite continuer avec la requête SQL basée sur cette valeur et faire écho à une réponse.

Si vous voulez quelque chose d'un peu plus basé sur ajax, lorsque l'utilisateur atterrira sur 'examplepage', prenez le 'pid' et ajoutez-le en tant qu'attribut de classe ou de données sur un div vide. Say appelé: 'résultats-conteneur'

<?php $mypid = $_GET['pid']; ?>
<div class"results-container" mypid="<?php echo $mypid; ?>"></div>

Et ensuite, exécutez un script js sur un document prêt qui lit l'attribut mypid sur cette div et effectue une extraction séparée. De cette façon, la page peut charger et afficher un statut de "récupération" et du contenu préliminaire pendant le chargement des résultats.

J'espère que cela avait du sens.

-Typé avec de gros doigts sur un téléphone portable! aaaaah.

0
GastroGeek

Je l'ai fait moi-même tout récemment. C’est peut-être tard pour la fête, mais au cas où d’autres voudraient savoir comment, c’était là ma démarche dans un environnement wordpress

  1. Créez une fonction qui lit le paramètre URL, telle que:

    function details_Page($atts)
      {
      global $wpdb; 
    
    
     // Get the database record for this details
     $DatabaseId = $_GET['pid'];
     if(!is_numeric ($DatabaseId))
       {
       // GO TO MISSING PAGE. PAGE IS NOT VALID. 
       header('Location: /missing-page/');  
      return;
      }
    
     GENERATE YOUR PAGE CODE HERE
    }
    

Créez maintenant un shortcode pour cette fonction ou utilisez-le dans votre modèle de page. Sur le plan fonctionnel, c'est une autre façon de faire un modèle de page.

         add_shortcode('DETAILS_PAGE', 'details_Page');

Ajoutez maintenant le shortcode à la page (ou au modèle) spécifiquement définie.

Pour modifier l'en-tête afin qu'il corresponde à vos données, assurez-vous que l'appel add_action se trouve dans la boucle principale ou dans functions.php. Sinon, vous aurez une condition de concurrence.

 add_action( 'wp_head', 'MMD_listings_add_custom_meta', 10 );
 function add_custom_meta()
    {
   $slug = basename(get_permalink());  // I use for the particular page
   if(  $slug == 'details')
      {
     $Name = $_GET[ 'Name' ];
     $Desc = $_GET[ 'Desc' ];
     $Logo = $_GET[ 'Logo' ];
    ?>   
    <meta content="<?php echo $Name; ?>>"/>
    <meta content="<?php echo $Desc; ?>">
   <?PHP
   }
 }
0
Debbie Kurth