web-dev-qa-db-de.com

Einfügen von dynamischem Inhalt in eine Seite

Ich sehe, dass dieses Thema regelmäßig auftaucht, habe aber noch keine Antwort auf meine spezielle Anforderung gefunden.

Ich versuche, eine WordPress-Seite als Vorlage zu verwenden und datenbankbasierten Inhalt (etwa 20 Textfelder, einschließlich Bilddateinamen) basierend auf einer als URL-Parameter übergebenen ID (und einem Index für meine Datenbank) einzufügen. z.B. www.example.com/examplepage/?pid=123

Vor WordPress konnte ich dies in PHP einfach tun, indem ich Code ausführte, um einen Datenbankeintrag zu erhalten, und dann HTML-Code ausschrieb, der mit diesen Feldern durchsetzt war.

Ich habe ein Plugin in WordPress, mit dem ich einige PHP Code-Schnipsel auf einer Seite erstellen kann, aber das befindet sich im Seitenrumpf und ich glaube, der Header wurde bereits ausgeschrieben. Die Kopfzeile enthält Felder wie title und meta desc, die mit dynamischen Inhalten gefüllt werden sollen.

Ich habe Plug-Ins für die CMS-ähnliche Verwaltung von Immobilieneinträgen, Filmen usw. gesehen, aber meine Datenbankverwaltung ist eine ungewöhnliche Angelegenheit, daher muss ich einen benutzerdefinierten Build-Ansatz wählen.

Ich verstehe, dass ich möglicherweise einige Arbeiten im Skript functions.php für mein Thema ausführen muss, um das Rendern von WordPress-Seiten zu verbessern, aber ich möchte darauf achten, die allgemeinen Seiten/Beiträge auf meiner Website nicht zu stören. Es ist nur diese eine spezielle Seite, die Parameter akzeptiert und den entsprechenden Inhalt lädt.

Einige Ratschläge zu den Schritten, die ich ergreifen muss, wären sehr dankbar.

3
Warren Vick

Während Sie eine Seitenvorlage erstellen, können Sie beliebige PHP Schnipsel in den Inhalt dieser Vorlage einfügen. Sie können also so weitermachen, wie Sie es in PHP getan haben. Dies könnte beispielsweise Ihre Seitenvorlage sein:

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

?>
<main>

    <?php

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

        // Populate your dynamic content here

    }

    ?>


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

Sie sind jedoch in Bezug auf Titel und Meta-Tags des Dokuments korrekt. Möglicherweise sind sie bereits festgelegt. Hier müssen Sie sich in den wp_title-Filter und die wp_head-Aktion einbinden und mithilfe der is_page_template-Funktion prüfen, ob Sie sich in der Seitenvorlage befinden.

Angenommen, Ihr Seitentempalte-Dateiname lautet etwa page-mytemplate.php und befindet sich im Stammverzeichnis Ihres Themas:

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=....>';

    }

} );

Das Problem

Das ist ein großes Problem mit <meta> Tags. WordPress hat keine Standardmethode zum Verwalten von <meta>-Tags des Dokuments. Wenn Sie ein Plug-In verwenden, das <meta>-Tags hinzufügt, können Sie diese nur überschreiben, wenn das Plug-In eine entsprechende Möglichkeit bietet.

Referenz

3
cybmeta

Ich könnte etwas vermissen, aber:

Wenn Sie zum Beispiel nur die 'pid' benötigen und sie Teil der URL ist, ist sie dann ziemlich einfach?

In der Seitenvorlage 'examplepage' machen Sie einfach Folgendes:

$mypid = $_GET['pid'];

machen Sie dort weiter mit der SQL-Abfrage, die auf diesem Wert basiert, und geben Sie eine Antwort aus.

Wenn Sie etwas ajaxbasierteres wollen, dann nehmen Sie die 'pid' und fügen Sie sie als Klassen- oder Datenattribut in ein leeres div ein, wenn der Benutzer auf 'examplepage' landet. Sprich: "Ergebnis-Container"

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

Lassen Sie dann ein js-Skript für das Dokument ausführen, das das mypid-Attribut für dieses div liest und einen separaten Abruf ausführt. Auf diese Weise kann die Seite geladen werden und einen Abrufstatus und vorläufigen Inhalt anzeigen, während die Ergebnisse geladen werden.

Ich hoffe, das ergab einen Sinn.

- Mit fetten Fingern auf ein Handy getippt! aaaaah.

0
GastroGeek

Ich habe das erst vor kurzem selbst gemacht. Das mag für die Party zu spät sein, aber für den Fall, dass andere wissen wollen wie, waren dies meine Schritte in einer WordPress-Umgebung

  1. Erstellen Sie eine Funktion, die den URL-Parameter liest, z.

    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
    }
    

Erstellen Sie nun einen Shortcode für diese Funktion oder verwenden Sie ihn in Ihrer Seitenvorlage. Funktionell ist dies eine weitere Möglichkeit, eine Seitenvorlage zu erstellen.

         add_shortcode('DETAILS_PAGE', 'details_Page');

Fügen Sie nun den Shortcode zu der speziell definierten Seite (oder Vorlage) hinzu.

Stellen Sie sicher, dass sich der Aufruf von add_action in der Primärschleife oder in functions.php befindet, um den Header so zu ändern, dass er Ihren Daten entspricht. Andernfalls haben Sie eine Rennbedingung.

 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