이 시리즈의 첫 번째 기사에서는 WordPress에서 제공하는 다양한 유형의 메타데이터와 메타데이터가 저장되는 위치, 그리고 이번 시리즈에서 다룰 내용에 대한 개요를 설명했습니다.
또한 WordPress에서 메타데이터의 역할과 이것이 개발자로서 우리와 어떤 관련이 있는지 정의합니다. 하지만 이것이 서론의 목적입니다. 이 시리즈의 나머지 부분에서 다룰 내용에 대한 조사입니다.
이 기사부터 시작하여 WordPress Post Meta API를 탐색하고 이것이 왜 유용한지, 이를 통해 무엇을 할 수 있는지, WordPress 애플리케이션을 통해 사용할 수 있는 방법을 활용하는 방법을 이해하겠습니다.
우선, 당신이 고급 개발자라면 이 튜토리얼 시리즈가 당신에게 큰 도움이 될 것 같지 않습니다. 대신, 테마에 대한 일부 작업을 수행하고, 일부 플러그인 코드를 수정하고, 프로젝트를 구성하는 게시물(또는 게시물 유형)에 추가 정보를 추가하여 한 단계 더 나아갈 준비가 된 사람들에게 더 적합합니다.
두 번째로, 이 튜토리얼의 코드 예제는 프로덕션 환경을 위한 것이 아니라는 점에 유의하세요. 대신, 우리가 보고 있는 코드는 누구나 사이트에 공개적으로 액세스할 수 있는 곳에서는 사용할 수 없습니다.
이제 이 시리즈를 마친 후 이 주제에 대한 더 고급 기술을 다룰 계획입니다. 하지만 지금은 API 사용에만 관심이 있습니다.
왜? 보고 연장이 지연되는 이유는 무엇입니까? 간단히 말해서 웹사이트 보안과 관련이 있습니다. 특히, 데이터베이스에 정보를 쓸 때마다 데이터가 안전하지 않은 형식으로 저장되어 있다고 가정해야 합니다.
메타데이터 API와 함께 사용될 데이터 정리를 위해 완전히 다른 API 세트를 탐색해야 하지만 이는 이를 위한 튜토리얼이 아닙니다.
이러한 API에 대해 이야기하고 이를 활용하지 못한다는 것이 조금 답답하게 들릴 수도 있다는 것을 알고 있습니다. 하지만 이는 API에 대한 소개일 뿐이라는 점을 기억하세요. 이 튜토리얼은 컴퓨터에서 게시물 메타데이터를 사용하기 시작하는 데 충분한 정보를 제공할 뿐만 아니라 향후 기사 시리즈에서 해당 주제를 더 깊이 탐구할 수 있도록 충분한 질문을 남겨두어야 합니다.
이제 WordPress Post Meta API를 사용해 보겠습니다. 참고: 이것은 긴 튜토리얼입니다.
코드를 보기 전에 항상 WordPress 설치를 실행하는 데이터베이스를 검색하는 데 필요한 도구가 있는지 확인하세요. 사용 가능한 도구 중 일부는 다음과 같습니다.
하지만 가장 좋아하는 것을 자유롭게 사용해 보세요. 데이터베이스의 데이터를 볼 수만 있다면 아무 문제가 없습니다.
다음으로 WordPress에서 게시물 메타데이터를 정의하는 방법을 살펴보겠습니다. Codex에 따르면:
WordPress에는 게시물 작성자가 게시물에 사용자 정의 필드를 할당할 수 있는 기능이 있습니다. 이 임의의 추가 정보를 메타데이터라고 합니다.메타데이터는 키/값 쌍을 통해 처리됩니다. 키는 메타데이터 요소의 이름입니다. 이 값은 해당 정보와 연결된 각 게시물의 메타데이터 목록에 표시되는 정보입니다.
간단히 말하면 WordPress를 사용하면 데이터베이스에 사용자 정의 정보를 작성하고 이를 원하는 게시물과 연결한 다음 필요에 따라 검색할 수 있습니다. 또한 정보는 고유한 키/값 쌍을 사용하여 저장됩니다.
이것이 처음이더라도 걱정하지 마세요. 아이디어는 저장하는 각 값에 대해 고유 키와 연결된다는 것입니다(문 손잡이에 잠금을 해제하는 데 사용되는 고유 키가 있는 것처럼).
핵심은 게시물에서 값을 검색하는 방법입니다. 하지만 한 가지 질문이 제기됩니다. 기사에 여러 메타데이터가 연결되어 있으면 어떻게 될까요? 즉, 특정 게시물이 여러 메타데이터를 동시에 저장할 수 있는 경우 고유한 메타데이터를 어떻게 검색합니까?
아래 예제 코드 중 일부를 살펴보면 데이터를 저장할 때 사용되는 키를 사용하는 것 외에도 게시물의 고유 ID를 함수에 전달해야 한다는 것을 알 수 있습니다.
하지만 실제로 보는 것보다 더 좋은 것은 없습니다. 따라서 로컬 컴퓨터에 WordPress가 설정되어 있고 기본 테마functions.php
의 핵심을 편집할 수 있다고 가정하고 시작해 보겠습니다.
다음 도구를 사용하겠습니다.
가장 중요한 것은 위에서 언급한 테마와 워드프레스를 실행하고 있다는 점입니다.
마지막으로, 다른 IDE와 데이터베이스 프런트엔드를 선호한다면 전혀 괜찮습니다.
이 글의 서문에서 많은 정보를 다루었지만 Post Meta API뿐만 아니라 다른 API도 살펴볼 때 이 정보가 도움이 될 것입니다. 그러니 이 사고방식을 유지하세요. 앞으로의 글에서도 이 글을 참고하겠습니다.
API를 자세히 살펴보겠습니다.
코드를 병합하는 방식은 테마를 변경하거나, 이 기능을 구현하거나, API와 상호작용하는 전문적인 방식이 아닙니다. 우리는 초보자를 위한 WordPress 개발의 첫 번째 단계로 이 작업을 수행합니다.
다음 시리즈에서는 이 시리즈에서 수행한 작업을 유지 관리 가능성, 보안 등에 더 많은 주의를 기울이는 더 유지 관리하기 쉬운 플러그인으로 추출할 것입니다.
현재는 API의 기본에 집중하고 있습니다.
이 튜토리얼과 시리즈의 나머지 튜토리얼 전체에서 볼 데모에는 Twenty Six Themes와 함께 WordPress의 기본 설치를 사용하고 있다는 점을 기억하세요.
둘째, functions.php
에서 변경사항을 적용하겠습니다. 일반적으로 이 변경을 수행하는 가장 좋은 위치는 아니지만 계속하기 전에 위의 참고 사항을 읽으십시오.
즉, 서버가 실행 중이고 IDE가 실행 준비되었으며 편집기가 이미 존재한다고 가정합니다 functions.php
. 스크린샷은 약간 다를 수 있지만 다음과 같아야 합니다.
functions.php
사용 시 어려운 점은 기존 테마의 기능을 향상시키는 데 도움이 되는 코드가 이미 가득 차 있다는 것입니다. 결국에는 향후 시리즈에서 코드를 플러그인으로 옮길 예정이지만, 최소한 코드를 독립적으로 포함할 수 있도록 파일을 만드는 첫 번째 단계를 밟고 싶습니다.
원하는 IDE 사용:
tutsplus-metadata.php
지정하세요. 완료되면 파일 시스템에 다음이 있어야 합니다.
마지막으로 functions.php
에 포함되었는지 확인해야 합니다. 이렇게 하려면 PHP 여는 태그 아래에 다음 코드 줄을 추가하세요.
브라우저를 다시 로드하세요. 모든 것이 순조롭게 진행된다면 functions.php
에 파일을 추가하기 전과 똑같은 테마가 표시될 것입니다.
이제 일을 시작합시다.
이전 논의를 떠올려 보세요. 데이터베이스에 메타데이터를 추가하려면 다음 세 가지가 필요합니다.
이 튜토리얼에서 우리가 해야 할 일은 모든 WordPress 설치에 기본으로 제공되는 기본 Hello World!를 표시하는 메타데이터를 추가하는 것뿐입니다. 게시물에.
우리 이름이 포함된 메타데이터를 추가하고 싶다고 가정해 보겠습니다. 따라서 우리가 사용할 메타 키는 my_name
이고 우리가 사용할 값은 귀하의 이름입니다. 제 경우에는 "Tom McFarlin"입니다.
가장 먼저 해야 할 일은 the_content
에 연결되는 함수를 정의하는 것입니다. 이를 통해 함수가 실행되는 동안 텍스트를 출력할 수 있습니다. Hooks가 처음이라면 이 시리즈를 읽어보세요.
초기 코드는 다음과 같아야 합니다:
으아아아이 코드를 실행하면 "[We are here.]"라는 문자열이 게시물 콘텐츠 위와 다른 콘텐츠 앞에 나타나야 하며 Hello world!에만 나타나야 합니다. 우편. echo
문자열 이전에 ID가 1인지 확인하기 때문입니다.
이 글 마지막 부분에 공유된 코드의 최종 버전에는 주석이 포함되어 있다는 점에 유의하세요. 그때까지는 코드에 새로운 섹션을 추가할 때마다 코드가 수행하는 작업을 설명하겠습니다.
이제 실제 메타데이터를 추가해 보겠습니다. 이렇게 하려면 Hello World에 대해 이 작업을 수행하고 있음을 확실히 알 수 있도록 조건부 본문에 이 코드를 추가하세요. 조건에서 ID 1을 이미 확인했으므로 이전 섹션에서 추가한 코드를 삭제하고 업데이트하면 됩니다.
조건문 본문에서 다음과 같이 add_post_meta
API 함수를 호출합니다.
이 정보를 가지고 뭔가 할 수 있으면 좋을 것 같아요. 하지만 그렇게 되기 전에 우리는 더 많은 것을 알아야 합니다. 즉, 메타데이터 업데이트(및 메타데이터 추가와 다른 점)에 대한 몇 가지 미묘한 차이가 있으며 API를 다룰 때 생각하지 못했을 수도 있습니다.
메타데이터 추가와 메타데이터 업데이트 사이에는 미묘한 차이가 있습니다. 키가 연관된 값을 고유하게 식별하는 방법을 알고 계십니까? 글쎄, 그것은 부분적으로 정확합니다.
전화할 때 add_post_meta
전화를 걸 때마다 항목을 만듭니다. 따라서 위 코드에서 페이지를 세 번 새로 고치면 다음과 같은 내용이 표시됩니다.
궁금하시죠? 코드 내용을 기억해 보세요:
请注意,如果指定帖子的自定义字段中已存在给定键,则会添加具有相同键的另一个自定义字段,除非 $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에 더 능숙해지는 데 도움이 되는 다른 유틸리티를 찾고 있다면 Envato Marketplace에서 구매할 수 있는 제품을 확인하는 것을 잊지 마세요. .
내 프로필 페이지에서 내 모든 강좌와 튜토리얼을 볼 수 있고 내 블로그 및/또는 Twitter(@tommcfarlin)에서 나를 팔로우할 수 있다는 점을 기억하세요. 여기에서 WordPress에서 이를 사용하는 방법에 대해서도 논의합니다.
아래 피드에 질문이나 댓글을 남겨주시면 최선을 다해 답변해드리겠습니다.
위 내용은 WordPress 게시물 메타데이터를 효과적으로 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!