PHP Template Art der Programmierung für WordPress Theme-Entwicklung

Hier ist das einfache PHP-Template-System, das ich gefunden habe

Die class (template.class.php)

template = file_get_contents($filepath); } function replace($var, $content) { $this->template = str_replace("#$var#", $content, $this->template); } function publish() { eval("?>".$this->template." 

Die Vorlagendatei (design.html)

Diese Datei enthält das Design Ihrer Website und die leeren Felder, die mit Inhaltsdaten zusammengeführt werden.

    #title#   

Hello #name#!

The time is: #datetime#

<? echo "

Embedded PHP works too!

"; ?>

Benutzung (index.php)

Jetzt erstellen wir ein Skript, das die Vorlage lädt und die class zum Zusammenführen der Daten verwendet.

  load("design.html"); $template->replace("title", "My Template Class"); $template->replace("name", "William"); $template->replace("datetime", date("m/d/y")); $template->publish(); ?> 

Jetzt für eine einfache WordPress-Post-Schleife index.php

   

Die Frage ist, wie man die obige WordPress-Schleife und das Top-PHP-Template-System zusammen verwendet, um eine HTML-Vorlage in ein WordPress-Theme zu konvertieren.

Solutions Collecting From Web of "PHP Template Art der Programmierung für WordPress Theme-Entwicklung"

Meine erste Antwort auf Ihre Frage ist eine andere Frage: Warum?

PHP ist eine Vorlagensprache. Sie brauchen diese Trennung nur in Fällen, in denen der Designer und der Programmierer zwei sehr unterschiedliche Jobs haben. Aber jemand, der WordPress-Themen schreibt, muss PHP sowieso kennen: Schauen Sie sich einfach die benutzerdefinierten Header- und Hintergrund- Setups an, unter add_theme_support , wp_enqueue_style und ähnlichen Fällen, in denen PHP, HTML und CSS miteinander verknüpft sind.

Um das Wie zu beantworten … casting Sie einen Blick auf TwentyEleven’s single.php . Es gibt einen Teil, wo Sie eine Vorlagen-Engine laden könnten :

 < ?php get_template_part( 'content', 'single' ); ?> 

Sie könnten stattdessen verwenden:

 locate_template( 'php/template.class.php', TRUE, TRUE ); $template = new Template; $template->load( 'templates/content-single.html' ); $template->replace( 'title', get_the_title() ); 

Einige Template-functionen sind nicht dafür the_content() , so verwendet zu werden, zum Beispiel the_content() : Es bietet keinen Parameter, um nur eine Zeichenkette zurückzugeben, und es ändert die Ausgabe von get_the_content() . Damit Sie einige functionen neu schreiben müssen, verwenden Sie einfach Ihre zusätzliche Vorlagen-Engine.
Für Schleifen, Navigationsmenüs oder Widgets ist es noch schwieriger, Logik von Markup zu trennen. Ja, es wäre schön, wenn es eine Trennung gäbe … aber ich sehe keinen Weg, dies in WordPress zu tun.

Hier ist eine kurze Änderung Ihrer class, um eine einfache Schleife zu behandeln:

 class Template { public $template; //new var to hold the loop items public $loop_items; //new var to hold loop template public $loop_template; function load($filepath) { $this->template = file_get_contents($filepath); $this->loop_template = substr($this->template, strlen("#Loop_Start#")+strpos($this->template, "#Loop_Start#"), (strlen($this->template) - strpos($this->template, "#Loop_End#"))*(-1)); $this->loop_items = array(); } function replace($var, $content) { $this->template = str_replace("#$var#", $content, $this->template); } //store item from loop function do_loop(){ if (have_posts()){ while (have_posts()){ the_post(); $this->loop_items[] = array('title' => get_the_title(), 'content' => apply_filters("the_content",get_the_content())); } }else{ $this->loop_items[] = array("title" => "Not Found", 'content' => "Sorry, nothing found"); } } function replace_loop(){ $loop_html = ''; foreach($this->loop_items as $key -> $arr){ $temp = str_replace("#loop_title#",$arr['title'],$this->loop_template); $temp = str_replace("#loop_content#",$arr['content'],$temp); $loop_html .= $temp; } $this->template = str_replace($this->loop_template,$loop_html,$this->template); } function publish() { eval("?>".$this->template."< ?"); } } 

Jetzt stellen Sie sicher, dass Ihr HTML diese Token hat:

  • #Loop_Start# - Platziere vor deiner Loop-Vorlage.
  • #Loop_End# - Stelle nach deiner Loop-Vorlage ein.
  • #loop_title# - Platzieren Sie den Titel des Elements in Ihrer Loop-Vorlage.
  • #loop_content# - Stelle, an der der Inhalt des Elements in der Loop-Vorlage enthalten sein soll.

beispielsweise:

   #title#   #Loop_Start# 

Hello #loop_title#

#loop_content#

< ? echo "

Embedded PHP works too!"; ?> #Loop_End#

und du solltest es so nennen:

 include "template.class.php"; $template = new Template; $template->load("design.html"); $template->replace("title", "My Template Class"); $template->do_loop(); $template->replace_loop(); $template->publish();