このシリーズの最初の記事では、WordPress が提供するさまざまなタイプのメタデータの概要、メタデータの保存場所、そしてこのシリーズで取り上げる内容について説明しました。
さらに、メタデータとは何か、WordPress におけるメタデータの役割、およびメタデータが開発者としての私たちとどのように関係するかを定義します。しかし、それが導入の目的であり、このシリーズの残りの部分で取り上げることの概要を調査することです。
この記事から始めて、WordPress Post Meta API の探索を開始し、これがなぜ役立つのか、それを使って何ができるのか、WordPress アプリケーションを通じて提供されるメソッドを活用する方法を理解します。
まず第一に、あなたが上級開発者である場合、この一連のチュートリアルはあまり役に立ちません。代わりに、テーマに関して何らかの作業を行い、プラグイン コードを微調整し、プロジェクトを構成する投稿 (または投稿タイプ) に追加情報を追加してさらに一歩先に進む準備ができている人に適しています。
第二に、このチュートリアル のコード例は、運用環境での使用を目的としたものではないことに注意してください。代わりに、私たちが見ているコードは、サイトが誰でも公的にアクセスできる場所で使用することを意図したものではありません。 このシリーズを終えた後、このトピックに関するさらに高度なテクニックを取り上げる予定です。ただし、現時点では API の使用状況のみを考慮しています。 ###なぜ?拡張機能の報告の遅れは何ですか?簡単に言えば、それはウェブサイトのセキュリティに関係します。具体的には、データベースに情報を書き込むときは常に、データが安全でない形式で保存されていると想定し、データをサニタイズする必要があります。
メタデータ API と組み合わせて使用される、データをクリーニングするためのまったく別の API セットを検討する必要がありますが、これはそのためのチュートリアルではありません。
これらの API について話しながら、それを活用できないのは、少しイライラさせられるかもしれません。ただし、これは API の単なる紹介にすぎないことを覚えておいてください。これらのチュートリアルでは、コンピューター上でポスト メタデータの使用を開始するための十分な情報が提供されますが、今後の一連の記事でこのトピックをより深く調査できるように、十分な質問も提供されます。
そうは言っても、WordPress Post Meta API の使用を開始しましょう。注意: これは長いチュートリアルです。
API の紹介
コードを確認する前に、WordPress インストールを実行しているデータベースを参照するために必要なツールがあることを確認することが重要です。利用可能なツールには次のようなものがあります:
続編プロフェッショナル版
WordPress には、投稿作成者がカスタム フィールドを投稿に割り当てることができる機能があります。この任意の追加情報をメタデータと呼びます。
メタデータはキーと値のペアを介して処理されます。キーはメタデータ要素の名前です。この値は、その情報に関連付けられた各投稿のメタデータ リストに表示される情報です。簡単に言うと、WordPress を使用すると、カスタム情報をデータベースに書き込み、必要な投稿に関連付けて、必要に応じて取得することができます。さらに、情報は一意のキーと値のペアを使用して保存されます。
独自のメタデータを作成する
これが初めての場合でも、心配する必要はありません。その考え方は、保存する各値が一意のキーに関連付けられるということです (ドアノブにロックを解除するために使用される一意のキーがあるのと同じです)。
以下のコード例をいくつか見てみると、データを保存するときに使用するキーを使用することに加えて、投稿の一意の ID も関数に渡す必要があることがわかります。
しかし、実際に動作しているのを見ることに勝るものはありません。したがって、ローカル マシンに WordPress がセットアップされており、デフォルト テーマのコアにある
functions.phpを編集できると仮定して、始めましょう。
###参考のために###次のツールを使用します:
###原子###
続編プロフェッショナル版コードをマージした方法
は、テーマを変更したり、この機能を実装したり、API を操作したりするための専門的な方法ではありません。これは、初心者向けの WordPress 開発への最初のステップとして行われます。
後続のシリーズでは、このシリーズで行った作業を、保守性やセキュリティなどにもさらに注意を払った、より保守しやすいプラグインに抽出します。
現在、私たちは API の基本に重点を置いています。
このチュートリアルとシリーズの残りのチュートリアル全体で説明するデモでは、WordPress の基本インストールと 26 個のテーマを使用していることに注意してください。
2 番目に、functions.php
に変更を加えます。通常、ここはこの変更を行うのに最適な場所ではありませんが、続行する前に上記の注意事項を必ず読んでください。
そうは言っても、サーバーが実行中であり、IDE が起動して準備ができており、functions.php
がすでにエディターに存在していることを前提としています。スクリーンショットは少し異なって見えるかもしれませんが、次のようになります:
functions.php
を使用する際の課題は、既存のテーマの機能を強化するのに役立つコードがすでに埋め込まれていることです。今後のシリーズでは最終的にはコードをプラグインに移動する予定ですが、少なくともファイルを作成する最初のステップを踏み、コードを独立して含めることができるようにしたいと考えています。
お好みの IDE を使用してください:
tutsplus-metadata.php
という名前を付けます。 完了すると、ファイル システムには次のものがあるはずです:
最後に、これを functions.php
に確実に含める必要があります。これを行うには、PHP 開始タグの下に次のコード行を追加します。
ブラウザをリロードします。すべてがうまくいけば、ファイルを functions.php
に追加する前とまったく同じテーマが表示されるはずです。
さて、仕事に取り掛かりましょう。
前の説明を思い出してください。データベースにメタデータを追加するには 3 つのものが必要です。
このチュートリアルでは、すべての WordPress インストールに標準で付属するデフォルトの Hello World! に表示されるメタデータを追加するだけです。 ### ポストで。
私たちの名前を含むメタデータを追加するとします。したがって、使用するメタ キーはmy_name で、使用する値はあなたの名前です。私の場合は「トム・マクファーリン」です。
the_content にフックする関数を定義することです。これにより、関数の実行中にテキストを出力できるようになります。フックを初めて使用する場合は、このシリーズをお読みください。
リーリー
このコードを実行すると、文字列「[We are here.]」が投稿コンテンツの上および他のコンテンツの前に表示され、 Hello World! にのみ表示されます。役職。これは、echo 文字列の前に ID が 1 であることを確認するためです。
メタデータを追加する
Hello World に対してこれを実行していることが確実にわかるようにします。条件で ID 1 をすでにチェックしているため、前のセクションで追加したコードを削除して更新できます。
条件ステートメントの本体で、
add_post_meta API 関数を次のように呼び出します。
リーリー
この情報を使って何かできたら素晴らしいですね。しかし、そうなる前に、もっと知る必要があります。とはいえ、メタデータの更新 (およびメタデータの追加との違い) については微妙な点がいくつかあり、API を扱うときには考えられなかったかもしれない点もあります。
メタデータの更新
を呼び出すと、その呼び出しを行うたびにエントリが作成されます。したがって、上記のコードでページを 3 回更新すると、次のような内容が表示されます。
とても興味がありますよね?コードの内容を思い出してください:
请注意,如果指定帖子的自定义字段中已存在给定键,则会添加具有相同键的另一个自定义字段,除非 $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、本教程以及提供的源代码中提供的信息,您应该能够开始向与您的每篇帖子相关的数据库写入其他内容。
但请记住,这只是为了演示目的,因为我们有更多信息要介绍。具体来说,我们需要检查数据清理和数据验证。尽管我们首先要讨论其他主题(例如用户元数据、评论元数据等),但我们很快就会讨论更高级的主题。
最終的には、将来の WordPress 開発者が他の人、その機関、さらには自分のプロジェクトのためのソリューションを開発できるよう、基礎を築くことを目指しています。
そうは言っても、私はこのシリーズを続けることを楽しみにしています。覚えておいてください。まだ始めたばかりの場合は、WordPress の初心者向けのテーマに焦点を当てた「WordPress の始め方」に関する私のシリーズをご覧ください。
それまでの間、成長を続ける WordPress ツールセットの構築に役立つ他のユーティリティをお探しの場合、またはコードを学習して WordPress の習熟度を高めるために、他のユーティリティをお探しの場合は、次のサイトで購入できるものをチェックすることを忘れないでください。エンバトマーケットプレイス。
私のすべてのコースとチュートリアルは私のプロフィール ページでご覧いただけます。また、私のブログや Twitter (@tommcfarlin) で私をフォローしてください。そこでは、さまざまなソフトウェア開発の実践方法と WordPress でのそれらの使用方法について説明しています。
ご質問やコメントがございましたら、お気軽に以下のフィードに残してください。それぞれに最善を尽くしてお答えいたします。
###リソース###以上がWordPress の投稿メタデータを効果的に使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。