Wenn Sie Teil 1 und 2 verpasst haben, finden Sie sie unten:
Vorbereitung des Themas
Wir müssen den auf der obigen Codex bereitgestellten Themen-Unit-Test-Test-data.xml herunterladen und in unsere WordPress-Installation importieren. Die integrierte WordPress-integrierte Importfunktionalität kann durch Navigieren zu Tools> Import aus der Seitenleiste gefunden werden.
Dies ist die Standard-WordPress-Importseite, daher müssen wir die zuvor heruntergeladene Themen-Einheit-Testdaten auswählen und auf die Schaltfläche "Datei" und importieren "klicken.
Ein zweiter Bildschirm wird dann präsentiert. Machen Sie sich keine Sorgen über den Abschnitt "Autoren zuweisen", da wir ihn als standardmäßig belassen können. Stellen Sie im Abschnitt „Anhänge importieren“ sicher, dass das Kontrollkästchen „Dateianhänge herunterladen und importieren“ wird, damit alle externen Anhänge in die Medienbibliothek heruntergeladen und importiert werden.
Drücken Sie die Taste „Senden“ und warten Sie, bis der Importprozess erfolgreich durchgeführt wird.
Jetzt sind wir bereit, den Code zu schreiben, der unsere Mitteilung anzeigt.
Verwenden des Filters des Kontents ist der perfekte Weg, um den Inhalt der dem Benutzer angezeigten Beiträge zu ändern. Gemäß dem vorherigen Tutorial fügen wir den Haken zum Boilerplate -Klassenloader hinzu, wobei der einzige Unterschied darin besteht
Fügen Sie diese Codezeile in die Methode hinzu:
<span>$this->loader->add_action( 'the_content', $plugin_public, 'the_content' );</span>
bedingt den Inhalt
Wir müssen sicherstellen, dass wir nur den veralteten Hinweistext einfügen, wenn ein einzelner Beitrag angezeigt wird, nicht im Blog -Post -Index. Dazu können wir es mit der Funktion is_main_query filtern. Diese Funktion ist nützlich, wenn wir feststellen müssen, ob die laufende Abfrage die Haupt- oder eine sekundäre/benutzerdefinierte Abfrage ist.
Eine andere Sache, die wir berücksichtigen müssen, ist, dass wir nur den Hinweistext für eine einzelne Ansicht des Post -Typs -Posts anzeigen.
Dies ist die aktualisierte The_Content -Methode, die in der Klasse veraltet_notice_public enthalten ist.
Berechnen der Days Differenz
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>// do something </span> <span>} </span> <span>return $post_content; </span> <span>}</span>
Zunächst müssen wir die gespeicherten Einstellungen unseres Plugins abrufen. Die Get_Option -Funktion erledigt den Job und als sicheres Maß werden wir einen Standardwert als zweites Argument für Get_Option übergeben.
<span>$this->loader->add_action( 'the_content', $plugin_public, 'the_content' );</span>
Um die Days -Differenz zwischen der aktuellen Zeit und der letzten modifizierten Zeit zu berechnen, werden wir zwei DateTime -Objekte instanziieren. Wir können eine genaue Messung des Zeitunterschieds unter Verwendung der Diff -Methode in der DateTime -Klasse erhalten. Beachten Sie, dass die DateTime -Klasse nur auf Php> = 5.3.0 verfügbar ist.
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>// do something </span> <span>} </span> <span>return $post_content; </span> <span>}</span>
$ DATE_DIFF ist eine Instanz der DateInterval -Klasse, daher werden wir eine Reihe von Daten in Bezug auf Zeitunterschiede zur Verfügung stehen. Wenn wir die Variable $ DATE_DIFF var_dump haben, sollten wir je nach dem Beitrag, den Sie derzeit anzeigen, erhalten.
<span>$position = get_option( 'outdated_notice_position', 'before' ); </span> <span>$days = (int) get_option( 'outdated_notice_day', 0 );</span>
Wir interessieren uns nur für den Wert der Tage, da er als Vergleich mit unserer Tageschwelle verwendet wird. Wie ich bereits sagte, werden wir sie vergleichen, damit wir die spezifische Klasse auf unser Mitteilungselement anwenden können, um sie zwischen den Beiträgen anders zu stylen.
<span>$date_now = new DateTime( current_time('mysql') ); </span> <span>$date_old = new DateTime( get_the_modified_time('Y-m-d H:i:s') ); </span> <span>$date_diff = $date_old->diff( $date_now );</span>
Dieser einfache Vergleichsblock reicht aus, um zu bestimmen, welche Klasse für unsere DIV verwendet werden soll. Das einzige, was jetzt noch übrig ist, ist, die HTML tatsächlich zu dem Postinhalt zu konstruieren.
Für einen besseren Übersetzungs -Bereit -Text werden wir die Funktion _n verwenden, um den richtigen Text auszuwählen, der je nach Anzahl der Tage seit der Aktualisierung des Posts verwendet wird. Dann werden wir den Kündigungstext in seine eigene DIV einwickeln, damit wir ihn später stylen können. Fühlen Sie sich frei, den Benachrichtigungstext nach Ihren eigenen Vorlieben zu optimieren.
<span>object(DateInterval)#286 (8) { </span> <span>["y"]=> </span> <span>int(0) </span> <span>["m"]=> </span> <span>int(0) </span> <span>["d"]=> </span> <span>int(12) </span> <span>["h"]=> </span> <span>int(23) </span> <span>["i"]=> </span> <span>int(17) </span> <span>["s"]=> </span> <span>int(22) </span> <span>["invert"]=> </span> <span>int(0) </span> <span>["days"]=> </span> <span>int(12) </span> <span>}</span>
Die Variable $ notal sollte nun das Markup enthalten, das wir in unseren Post -Inhalt einfügen werden. Das einzige, was noch zu tun ist, ist, es hinzuzufügen.
<span>if ( $date_diff->days > $days ) { </span> <span>$class = 'is-outdated'; </span> <span>} else { </span> <span>$class = 'is-fresh'; </span> <span>}</span>
Als Zusammenfassung sollte die Methode der The_Content in veraltet_notice_public endlich aussehen.
<span>// Filter the text </span> <span>$notice = sprintf( </span> <span>_n( </span> <span>'This post was last updated %s day ago.', </span> <span>'This post was last updated %s days ago.', </span> <span>$date_diff->days, </span> <span>'outdated-notice' </span> <span>), </span> <span>$date_diff->days </span> <span>); </span> <span>// Add the class </span> <span>$notice = '<div >' . $notice . '</div>'; </span> <span>$notice = sprintf( $notice, $class );</span>
Versuchen Sie, auf ein paar Seiten zu stöbern, um festzustellen, ob unser Plugin wie beabsichtigt funktioniert. Das ist es, was ich sehe, wenn ich zum "Hello World" -Post auf URL
Wir werden ein einfaches Styling auf die .outdated-Notice-DIV anwenden, die gut zum allgemeinen Themendesign passt, ohne aufdringlich zu sein. Um dies zu tun, werden wir in Bezug auf die bereits verwendete Schriftgröße oder die Schriftfamilie nichts ändern. Außerdem werden wir das Bootstrap -Farbschema und das Styling vorerst ausleihen.
Öffnen Sie die veraltete Datei veraltet, die in der Öffentlichkeit/CSS-Datei enthalten ist, und fügen Sie diese Regel hinzu.
<span>if ( 'after' == $position ) { </span> <span>$post_content .= $notice; </span> <span>} else { </span> <span>$post_content = $notice . $post_content; </span> <span>}</span>
Wir brauchen auch zwei verschiedene Stile, um die Nachfrischigkeit darzustellen, die ein Stil für .is-Fresh und eine für .is-outdated ist. Dieser Ausschnitt sollte den Trick machen und uns ein schönes grüne Farbschema für einen frischen Beitrag und ein rotes Farbschema für einen veralteten Beitrag verleihen.
<span>public function the_content( $post_content ) { </span> <span>if ( is_main_query() && is_singular('post') ) { </span> <span>$position = get_option( 'outdated_notice_position', 'before' ); </span> <span>$days = (int) get_option( 'outdated_notice_day', 0 ); </span> <span>$date_now = new DateTime( current_time('mysql') ); </span> <span>$date_old = new DateTime( get_the_modified_time('Y-m-d H:i:s') ); </span> <span>$date_diff = $date_old->diff( $date_now ); </span> <span>if ( $date_diff->days > $days ) { </span> <span>$class = 'is-outdated'; </span> <span>} else { </span> <span>$class = 'is-fresh'; </span> <span>} </span> <span>// Filter the text </span> <span>$notice = sprintf( </span> <span>_n( </span> <span>'This post was last updated %s day ago.', </span> <span>'This post was last updated %s days ago.', </span> <span>$date_diff->days, </span> <span>'outdated-notice' </span> <span>), </span> <span>$date_diff->days </span> <span>); </span> <span>// Add the class </span> <span>$notice = '<div >' . $notice . '</div>'; </span> <span>$notice = sprintf( $notice, $class ); </span> <span>if ( 'after' == $position ) { </span> <span>$post_content .= $notice; </span> <span>} else { </span> <span>$post_content = $notice . $post_content; </span> <span>} </span> <span>} </span> <span>return $post_content; </span> <span>}</span>
Lassen Sie uns die Postansicht aktualisieren und sehen, wie sie gestylt wird. Beispiele für einen frischen und veralteten Beitrag:
Das ist es! Wir haben jetzt unser voll funktionsfähiges Plugin basierend auf dem WordPress -Plugin -Boilerplate entwickelt.
Es gibt verschiedene Dinge, die basierend auf dem verbessert werden können, was wir bisher getan haben. Unter ihnen sind:
Die WordPress -Plugin -Kesselplatte bietet einen perfekten Ausgangspunkt, um jedes Plugin von Grund auf neu zu entwickeln. In diesem letzten Teil der Serie haben wir die öffentliche Funktionalität unseres Plugins entwickelt. Die Modifikationen sind zwar recht einfach, werden in geringer Zeit vorgenommen, während sie das von der Kesselplatte selbst festgelegte OOP -Muster beibehalten und Standards und Best Practices einhalten.
Eine vollständige Kopie des Codes ist wie gewohnt bei GitHub im Teil-3-Zweig verfügbar.
Das obige ist der detaillierte Inhalt vonDer WordPress -Plugin -Boilerplate Teil 3: Die letzten Schritte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!