Heim > Artikel > Backend-Entwicklung > Nutzen Sie WordPress-Post-Metadaten effektiv
Im ersten Artikel dieser Serie habe ich einen Überblick über alle verschiedenen Arten von Metadaten gegeben, die von WordPress bereitgestellt werden, wo die Metadaten gespeichert werden und was wir in dieser Serie behandeln werden.
Darüber hinaus definiere ich, was Metadaten sind; ihre Rolle in WordPress und wie sie sich auf uns als Entwickler beziehen. Aber das ist der Zweck der Einleitung: ein Überblick darüber, was wir im Rest dieser Serie behandeln werden.
Mit diesem Artikel beginnen wir damit, die WordPress Post Meta API zu erkunden und zu verstehen, warum sie nützlich ist, was wir damit machen können und wie wir die über die WordPress-Anwendung verfügbaren Methoden nutzen können.
Zuallererst: Wenn Sie ein fortgeschrittener Entwickler sind, wird Ihnen diese Reihe von Tutorials wahrscheinlich nicht viel weiterhelfen. Stattdessen ist es eher für diejenigen geeignet, die etwas an dem Thema gearbeitet haben, vielleicht etwas Plugin-Code optimiert haben und bereit sind, noch einen Schritt weiter zu gehen, indem sie den Beiträgen (oder Beitragstypen), aus denen ihr Projekt besteht, einige zusätzliche Informationen hinzufügen.
Zweitens beachten Sie bitte, dass die Codebeispiele in diesem Tutorial nicht für Produktionsumgebungen gedacht sind. Stattdessen ist der Code, den wir betrachten, nicht für die Verwendung an einem Ort vorgesehen, an dem die Website für jedermann öffentlich zugänglich ist.
Jetzt habe ich vor, nach Abschluss dieser Serie fortgeschrittenere Techniken zu diesem Thema zu behandeln. Aber im Moment geht es uns nur um die API-Nutzung.
Warum? Wie groß ist die Verzögerung bei der Meldung von Verlängerungen? Einfach ausgedrückt hat es mit der Website-Sicherheit zu tun. Insbesondere wenn wir Informationen in eine Datenbank schreiben, müssen wir davon ausgehen, dass die Daten in einem unsicheren Format gespeichert sind.
Wir müssen einen völlig anderen Satz von APIs zum Bereinigen von Daten erkunden, die in Verbindung mit der Metadaten-API verwendet werden, aber dies ist kein Tutorial dafür.
Ich weiß, es klingt vielleicht ein wenig frustrierend, über diese APIs zu sprechen und nicht in der Lage zu sein, sie zu nutzen. Aber denken Sie daran, dass dies nur eine Einführung in die API ist. Diese Tutorials sollten Ihnen genügend Informationen liefern, um mit der Verwendung von Post-Metadaten auf Ihrem Computer zu beginnen, aber auch genügend Fragen hinterlassen, damit wir das Thema in einer zukünftigen Artikelserie eingehender untersuchen können.
Nachdem dies gesagt ist, beginnen wir mit der Verwendung der WordPress Post Meta API. Bitte beachten Sie: Dies ist ein langes Tutorial.
Bevor wir uns den Code ansehen, stellen Sie immer sicher, dass Sie über die notwendigen Tools zum Durchsuchen der Datenbank verfügen, auf der Ihre WordPress-Installation ausgeführt wird. Zu den verfügbaren Tools gehören:
Aber Sie können gerne das verwenden, was Ihnen am besten gefällt. Solange Sie die Daten in der Datenbank sehen können, können Sie loslegen.
Als nächstes wollen wir verstehen, wie WordPress Post-Metadaten definiert. Laut Code:
WordPress bietet die Möglichkeit, Beitragsautoren die Zuweisung benutzerdefinierter Felder zu Beiträgen zu ermöglichen. Diese willkürlichen Zusatzinformationen werden Metadaten genannt.Metadaten werden über Schlüssel/Wert-Paare verarbeitet. Der Schlüssel ist der Name des Metadatenelements. Bei diesem Wert handelt es sich um die Informationen, die in der Metadatenliste für jeden mit diesen Informationen verknüpften Beitrag angezeigt werden.
Einfach ausgedrückt ermöglicht uns WordPress, benutzerdefinierte Informationen in die Datenbank zu schreiben, sie mit jedem gewünschten Beitrag zu verknüpfen und sie dann bei Bedarf abzurufen. Darüber hinaus werden Informationen mithilfe eindeutiger Schlüssel/Wert-Paare gespeichert.
Wenn das neu für Sie ist, machen Sie sich keine Sorgen. Die Idee dahinter ist, dass jeder von Ihnen gespeicherte Wert mit einem eindeutigen Schlüssel verknüpft ist (so wie ein Türknauf einen eindeutigen Schlüssel hat, mit dem er entriegelt wird).
Der Schlüssel liegt darin, wie wir den Wert aus dem Beitrag abrufen. Es stellt sich jedoch die Frage: Was passiert, wenn einem Artikel mehrere Metadaten zugeordnet sind? Das heißt, wenn ein bestimmter Beitrag mehrere Metadaten gleichzeitig speichern kann, wie können wir dann eindeutige Metadaten abrufen?
Wenn wir uns einige der Beispielcodes unten ansehen, werden wir feststellen, dass wir zusätzlich zur Verwendung des Schlüssels, der zum Speichern der Daten verwendet wird, auch die eindeutige ID des Beitrags an die Funktion übergeben müssen.
Aber nichts ist besser, als es in Aktion zu sehen. Angenommen, Sie haben WordPress auf Ihrem lokalen Computer eingerichtet und können es im Kern des Standardthemas bearbeiten functions.php
, dann fangen wir an.
Ich werde die folgenden Tools verwenden:
Das Wichtigste ist, dass Sie WordPress und das oben genannte Theme verwenden.
Wenn Sie schließlich andere IDEs und Datenbank-Frontends bevorzugen, ist das völlig in Ordnung.
Wir haben in der Einleitung dieses Artikels viele Informationen behandelt, aber diese Informationen werden sich als nützlich erweisen, wenn wir uns nicht nur mit der Post-Meta-API, sondern auch mit anderen APIs befassen. Behalten Sie also diese Mentalität bei. Ich werde auch in einem zukünftigen Artikel auf diesen Artikel verweisen.
Lassen Sie uns einen Blick auf die API werfen.
Die Art und Weise, wie wir den Code zusammengeführt haben, ist keine professionelle Möglichkeit, das Thema zu ändern, diese Funktion zu implementieren oder mit der API zu interagieren. Wir machen dies als ersten Schritt in die WordPress-Entwicklung für Anfänger. In den folgenden Serien werden wir die in dieser Serie geleistete Arbeit in ein besser wartbares Plug-In umwandeln, das auch mehr Wert auf Wartbarkeit, Sicherheit usw. legt. Derzeit konzentrieren wir uns auf die Grundlagen von APIs. Denken Sie daran, dass ich eine Basisinstallation von WordPress zusammen mit Twenty Six Themes für die Demos verwende, die wir in diesem Tutorial und den restlichen Tutorials der Serie sehen werden. Zweitens nehmen wir die Änderungen in Wir gehen jedoch davon aus, dass Ihr Server läuft, Ihre IDE betriebsbereit ist und der Editor bereits vorhanden ist Die Herausforderung bei der Verwendung von Verwenden Sie die IDE Ihrer Wahl: Wenn Sie fertig sind, sollten Sie Folgendes in Ihrem Dateisystem haben: Abschließend müssen wir sicherstellen, dass wir es in Laden Sie Ihren Browser neu. Wenn alles gut geht, sollten Sie genau dasselbe Thema sehen wie vor dem Hinzufügen der Dateien zu Jetzt machen wir uns an die Arbeit. Erinnern Sie sich an unsere vorherige Diskussion: Wir benötigen drei Dinge, um Metadaten zur Datenbank hinzuzufügen: In diesem Tutorial müssen wir lediglich Metadaten hinzufügen, die das standardmäßige Hello World anzeigen, das standardmäßig bei jeder WordPress-Installation enthalten ist! im Beitrag. Angenommen, wir möchten einige Metadaten hinzufügen, die unseren Namen enthalten. Der Metaschlüssel, den wir verwenden werden, ist also Als erstes müssen wir eine Funktion definieren, die sich in Ihr erster Code sollte so aussehen: Wenn Sie diesen Code ausführen, sollte die Zeichenfolge „[Wir sind hier.]“ über dem Beitragsinhalt und vor anderen Inhalten erscheinen, und zwar nur auf Hallo Welt! Post. Dies liegt daran, dass wir vor der Zeichenfolge Bitte beachten Sie, dass die endgültige Version des am Ende dieses Artikels veröffentlichten Codes Kommentare enthalten wird. Bis dahin erkläre ich, was der Code tut, wenn wir ihm jeden neuen Abschnitt hinzufügen. Jetzt fügen wir einige tatsächliche Metadaten hinzu. Fügen Sie dazu diesen Code zum Text der Bedingung hinzu, damit wir sicher wissen, dass wir dies für „Hello World“ tun. Da wir in der Bedingung bereits nach ID 1 gesucht haben, können wir den im vorherigen Abschnitt hinzugefügten Code löschen und aktualisieren. Im Hauptteil der bedingten Anweisung rufen wir die
Bereiten Sie das Thema vor
functions.php
vor. Dies ist im Allgemeinen nicht der beste Ort, um diese Änderung vorzunehmen. Lesen Sie jedoch unbedingt den obigen Hinweis, bevor Sie fortfahren. functions.php
. Auch wenn Ihr Screenshot etwas anders aussieht, sollte er in etwa so aussehen: functions.php
besteht darin, dass es bereits voller Code ist, der dazu beiträgt, die Funktionalität eines vorhandenen Themes zu verbessern. Obwohl wir den Code in einer zukünftigen Serie irgendwann in ein Plugin verschieben werden, möchten wir zumindest den ersten Schritt machen und eine Datei erstellen, damit wir unseren Code unabhängig einbinden können.
tutsplus-metadata.php
. functions.php
einbeziehen. Fügen Sie dazu die folgenden Codezeilen unter dem PHP-Start-Tag hinzu. <?php
include_once( 'tutsplus-metadata.php' );
functions.php
. Loslegen Sie
my_name
und der Wert, den wir verwenden werden, ist Ihr Name. In meinem Fall ist es „Tom McFarlin“. the_content
einklinkt. Dadurch können wir Text ausgeben, während die Funktion ausgeführt wird. Wenn Sie mit Hooks noch nicht vertraut sind, lesen Sie diese Serie. <?php
add_filter( 'the_content', 'tutsplus_metadata' );
function tutsplus_metadata( $content ) {
if ( 1 === get_the_ID() ) {
echo "[We are here.]"
}
return $content;
}
echo
prüfen, ob die ID 1 ist. Metadaten hinzufügen
<?php
add_filter( 'the_content', 'tutsplus_metadata' );
function tutsplus_metadata( $content ) {
if ( 1 === get_the_ID() ) {
add_post_meta( get_the_ID(), 'my_name', 'Tom McFarlin' );
}
return $content;
}
add_post_meta
Es wäre großartig, wenn wir mit diesen Informationen etwas anfangen könnten. Bevor das geschieht, müssen wir jedoch mehr wissen. Allerdings gibt es einige Nuancen beim Aktualisieren von Metadaten (und wie sie sich vom Hinzufügen von Metadaten unterscheiden) und einige, an die Sie beim Umgang mit APIs vielleicht noch nicht gedacht haben.
Metadaten aktualisieren
Wenn Sie anrufen
, erstellen Sie bei jedem Anruf einen Eintrag. Wenn Sie also in unserem Code oben die Seite dreimal aktualisieren, sehen Sie etwa Folgendes:
add_post_meta
Neugierig, oder? Erinnern Sie sich an den Inhalt des Codes:
请注意,如果指定帖子的自定义字段中已存在给定键,则会添加具有相同键的另一个自定义字段,除非 $unique 参数设置为 true,在这种情况下,不会进行任何更改。
啊,该函数接受一个可选参数。这是一个名为 $unique
的布尔值,如果我们只想确保添加的值是唯一的,它允许我们传递 true
。
此时您可能想要删除现有记录。如果没有,也没关系,只需为 my_name
键使用不同的值即可。
这意味着我们可以将代码更新为如下所示:
<?php add_filter( 'the_content', 'tutsplus_metadata' ); function tutsplus_metadata( $content ) { if ( 1 === get_the_ID() ) { add_post_meta( get_the_ID(), 'my_name', 'Tom McFarlin', true ); } return $content; }
现在您只创建一个条目。此外,如果您尝试更改代码中该键的值,那么它在数据库中将不会被覆盖。。一旦写入帖子元数据完成,它就会像第一次一样存储。
但事实并非一定如此,这就是 update_post_meta
发挥作用的地方。事实上,update_post_meta
可能比 add_post_meta
更常用,具体取决于您的用例。
在查看代码之前,请先查看 Codex 的内容:
函数 update_post_meta() 更新指定帖子的现有元键(自定义字段)的值。这可以用来代替 add_post_meta() 函数。该函数要做的第一件事是确保 $meta_key 已经存在于 $post_id 上。如果没有,则调用 add_post_meta($post_id, $meta_key, $meta_value) 并返回其结果。
你明白了吗?它可以“用来代替 add_post_meta
”,这很有用,因为这意味着:
update_post_meta
,此时,您可能想要删除数据库中的信息,或创建一对新的键和值。这意味着我们可以将代码更新为如下所示:
<?php add_filter( 'the_content', 'tutsplus_metadata' ); function tutsplus_metadata( $content ) { if ( 1 === get_the_ID() ) { update_post_meta( get_the_ID(), 'my_name', 'Tom McFarlin' ); } return $content; }
不过,这也带来了一些固有的危险。
也就是说,如果您覆盖了一个您从未打算覆盖的值,那么该值就会消失,并且无法回收(除非您做了超出本系列范围的更出色的工作)。
不过, update_post_meta
有一个可选的最后一个参数,那就是 $prev_value
参数。也就是说,您可以指定要覆盖哪个值。
例如,您有使用 add_post_meta
创建的具有相同密钥的多条记录,并且您只想更新其中一条记录。要更新该数据,您需要传入与该一条记录对应的值。
add_post_meta
和 update_post_meta
之间的区别可能被认为很微妙,但这取决于您的用例。
在这里,我将尝试尽可能简单地分解它们,因为尽管考虑到我们上面看到的示例,它可能看起来很复杂,但当您将其全部展开时,它会更简单。
add_post_meta
非常有用。如果该值已经存在,则可能会或不会写入新值。如果您为函数的 $unique
参数传递 true
,则只会创建第一条记录,并且不会覆盖该 >除了 update_post_meta
。update_post_meta
可以用来代替 add_post_meta
并且将始终覆盖以前存在的值。如果您正在处理由 add_post_meta
创建的多条记录,那么您可能需要指定要覆盖的先前值。这就是一切。当然,我们仍然需要处理从数据库中检索记录并将其显示在屏幕上的问题。
在检索帖子元数据时,您需要记住两件事:
有时这取决于您存储原始信息的方式;有时它取决于您想要如何使用它。
在了解检索信息的各种方法之前,让我们首先了解一下执行此操作的基本 API 调用。具体来说,我说的是 get_post_meta
。如果您到目前为止一直在关注,那么理解 API 应该相对容易。
该函数接受三个参数:
来自法典:
检索帖子的帖子元字段。如果 $single 为 false,则将是一个数组。如果 $single 为 true,则为元数据字段的值。
看起来很简单。因此,考虑到我们源代码的最后一部分现在所在的位置,我想说我们可以通过调用 get_post_meta( get_the_ID(), 'my_name' );
来检索信息。 p>
上面的代码将返回一个数组。
每当您听到“多个值”这个短语时,想象一下您正在使用的编程语言中的数组或某种类型的数据集合会很有帮助。
在我们的示例中,考虑一下我们使用 add_post_meta
多次存储相同密钥的情况。作为回顾,数据库如下所示:
如果我通过密钥检索信息,我会得到什么?由于我没有指定我想要一个字符串,因此我将返回所有记录的数组。这将使我能够迭代它们中的每一个。
另一方面,如果我指定 true 来获取字符串,那么我只会获取使用 add_post_meta
创建的第一行。
为此,如果您希望获取给定键的多个值,那么您的代码将如下所示:
<?php add_filter( 'the_content', 'tutsplus_metadata' ); function tutsplus_metadata( $content ) { if ( 1 === get_the_ID() ) { var_dump( get_post_meta( get_the_ID(), 'my_name' ) ); } return $content; }
请注意,我使用 var_dump
是为了更轻松地在浏览器中查看从 WordPress 返回的信息;然而,我更喜欢使用调试器,我们可能会在以后的文章中讨论这一点。
现在假设您想要为一篇文章存储单个值。在这种情况下,您仍然需要帖子 ID 和元数据密钥;但是,您还需要提供 true
作为 get_post_meta
的第三个参数。
如上所述,如果您正在处理使用 add_post_meta
创建多行的情况,那么您将取回创建的第一行;但是,如果您将此函数与 update_post_meta
一起使用,那么您将返回存储的数据的字符串值。
由于我们已经介绍了前者但没有介绍后者,所以代码如下:
<?php add_filter( 'the_content', 'tutsplus_metadata' ); function tutsplus_metadata( $content ) { if ( 1 === get_the_ID() ) { var_dump( get_post_meta( get_the_ID(), 'my_name', true ) ); } return $content; }
然后,您将在调用该函数时返回您保存为元值的任何值。与必须使用一组可能包含也可能不包含类似信息的记录和数组相比,这非常简单。
使用帖子元数据的最后一点与删除它有关。这很简单,但我们需要了解一些细微差别,以确保我们有效地做到这一点。
但首先,这是 Codex 的定义:
此函数从指定帖子中删除具有指定键或键和值的所有自定义字段。
简短、甜蜜、切中要点。该函数接受三个参数:
meta 值是可选的,但如果您一直在使用 add_post_meta
并希望删除多次调用该函数创建的特定条目之一(正如我们已经在本教程的其他地方可以看到)。
虽然调用 delete_post_meta
就像传递帖子 ID、元键和可选元值一样简单,但该函数返回一个布尔值,说明数据是否已删除。
删除我们迄今为止一直在查看的一些帖子元数据的示例代码可能如下所示:
<?php add_filter( 'the_content', 'tutsplus_metadata' ); function tutsplus_metadata( $content ) { if ( 1 === get_the_ID() ) { delete_post_meta( get_the_ID(), 'my_name' ); } return $content; }
但是,您的实施可能会有所不同。如果您正在使用多个元数据,并且想要验证删除是否成功,那么您可以将代码包装在条件中。
下面您将找到一个很长的、有记录的代码片段,它应该代表我们在本教程中讨论的大部分内容。请注意,这些函数挂接到 the_content
。
这仅用于演示目的,以便您可以在加载特定页面时轻松触发这些函数。
<?php /** * This file shows how to work with the common Post Meta API functions. * * Namely, it demonstrates how to use: * - add_post_meta * - update_post_meta * - get_post_meta * - delete_post_meta * * Each function is hooked to 'the_content' so that line will need to be * commented out depending on which action you really want to test. * * Also note, from the tutorial linked below, that this file is used form * demonstration purposes only and should not be used in a production * environment. * * Tutorial: * http://code.tutsplus.com/tutorials/how-to-work-with-wordpress-post-metadata--cms-25715 * * @version 1.0.0 * @author Tom McFarlin * @package tutsplus_wp_metadata */ add_filter( 'the_content', 'tutsplus_add_post_meta' ); /** * Determines if the current post is the default 'Hello World' post and, if so, * adds my name as the post meta data to the postmeta database table. * * @param string $content The post content. * @return string $content The post content. */ function tutsplus_add_post_meta( $content ) { if ( 1 === get_the_ID() ) { add_post_meta( get_the_ID(), 'my_name', 'Tom McFarlin' ); } return $content; } add_filter( 'the_content', 'tutsplus_update_post_meta' ); /** * Determines if the current post is the default 'Hello World' post and, if so, * updates my name as the post meta data to the postmeta database table. This * is an alternative way of writing post metadata to the postmeta table as * discussed in the linked tutorial. * * @param string $content The post content. * @return string $content The post content. */ function tutsplus_update_post_meta( $content ) { if ( 1 === get_the_ID() ) { update_post_meta( get_the_ID(), 'my_name', 'Tom McFarlin' ); } return $content; } add_filter( 'the_content', 'tutsplus_get_post_meta' ); /** * Determines if the current post is the default 'Hello World' post and, if so, * retrieves the value for the 'my_name' in the format of a string and echoes * it back to the browser. * * @param string $content The post content. * @return string $content The post content. */ function tutsplus_get_post_meta( $content ) { // Note: Don't worry about the esc_textarea call right now. if ( 1 === get_the_ID() ) { echo esc_textarea( get_post_meta( get_the_ID(), 'my_name', true ) ); } return $content; } add_filter( 'the_content', 'tutsplus_delete_post_meta' ); /** * Determines if the current post is the default 'Hello World' post and, if so, * deletes the post metadata identified by the unique key. * * @param string $content The post content. * @return string $content The post content. */ function tutsplus_delete_post_meta( $content ) { if ( 1 === get_the_ID() ) { delete_post_meta( get_the_ID(), 'my_name' ); } return $content; }
通常,您会发现与其他挂钩相关的元数据函数,例如 save_post
和类似操作,但这是更高级工作的主题。也许我们会在今年晚些时候的另一个系列中介绍这一点。
WordPress Codex 中提供了每个 API 函数,因此,如果您想在本系列的下一篇文章之前跳到前面并进行更多阅读,那么请随意这样做。
如前所述,这是对 WordPress Post Meta API 的介绍。通过 Codex、本教程以及提供的源代码中提供的信息,您应该能够开始向与您的每篇帖子相关的数据库写入其他内容。
但请记住,这只是为了演示目的,因为我们有更多信息要介绍。具体来说,我们需要检查数据清理和数据验证。尽管我们首先要讨论其他主题(例如用户元数据、评论元数据等),但我们很快就会讨论更高级的主题。
Letztendlich versuchen wir, den Grundstein dafür zu legen, dass zukünftige WordPress-Entwickler Lösungen für andere, für ihre Institutionen und sogar für ihre Projekte entwickeln können.
Trotzdem freue ich mich darauf, diese Serie fortzusetzen. Denken Sie daran: Wenn Sie gerade erst anfangen, können Sie sich meine Serie „Erste Schritte mit WordPress“ ansehen, die sich auf Themen speziell für WordPress-Anfänger konzentriert.
Wenn Sie in der Zwischenzeit nach anderen Dienstprogrammen suchen, die Ihnen beim Aufbau Ihres wachsenden WordPress-Toolsets helfen oder Code lernen und sich mit WordPress besser auskennen möchten, vergessen Sie nicht, sich anzusehen, was wir auf dem Envato Marketplace zum Kauf anbieten .
Denken Sie daran, dass Sie alle meine Kurse und Tutorials auf meiner Profilseite ansehen und mir auf meinem Blog und/oder Twitter (@tommcfarlin) folgen können, wo ich verschiedene Softwareentwicklungspraktiken bespreche und wie wir sie in WordPress verwenden.
Bitte zögern Sie nicht, im Feed unten Fragen oder Kommentare zu hinterlassen. Ich werde mein Bestes tun, um auf jede einzelne Frage zu antworten.
Das obige ist der detaillierte Inhalt vonNutzen Sie WordPress-Post-Metadaten effektiv. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!