WordPress网站建设者或开发者经常会用到元框(Meta Boxes)。本文将深入探讨元框与自定义文章类型的关联和集成,以及如何在WordPress前端使用元框中保存的数据。
核心要点
add_meta_box()
函数(挂载到add_meta_boxes
动作)可以将元框添加到任何文章类型的编辑界面。此函数可用于将元框添加到多个文章类型(如文章、页面和自定义文章类型“书籍”),或添加到所有现有及未来创建的文章类型。add_meta_boxes
动作钩子,可以将元框限制在特定文章类型。register_post_type()
函数用于自定义文章类型,其参数数组包含register_meta_box_cb
,其值为在设置元框时调用的回调函数。global_notice_meta_box_callback
函数包含元框的表单字段。save_post
动作钩子处理在将文章保存为草稿或发布时保存到文本区域的数据。通过在保存对应文章内容之前显示元框输入的数据,可以将这些数据有效利用。将元框添加到文章类型屏幕
Narayan Prusty已涵盖了创建元框的大多数(如果不是全部)PHP函数、参数和动作钩子。
要将元框添加到任何文章类型的编辑屏幕,可以使用add_meta_box()
函数并将其挂接到add_meta_boxes
动作。
以下代码将元框添加到文章编辑屏幕。请注意global_notice_meta_box_callback
函数,该函数用于显示元框中的表单字段。稍后我们将详细介绍。
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', 'post' ); } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
要将元框添加到多个文章类型屏幕(文章、页面和自定义文章类型“书籍”),请创建一个文章类型数组,遍历该数组,并使用add_meta_box()
将其添加到这些文章类型中。
<code class="language-php">function global_notice_meta_box() { $screens = array( 'post', 'page', 'book' ); foreach ( $screens as $screen ) { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', $screen ); } } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
要将元框添加到所有现有及未来创建的文章类型,请使用get_post_types()
获取文章类型数组,然后用它替换上面的$screen
值。
<code class="language-php">function global_notice_meta_box() { $screens = get_post_types(); foreach ( $screens as $screen ) { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', $screen ); } } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
也可以通过省略第三个($screen
)参数来将元框添加到所有现有和新的文章类型:
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback' ); } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
还可以通过将文章类型名称(本例中为“book”)附加到add_meta_boxes
动作钩子来限制元框到特定文章类型:
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback' ); } add_action( 'add_meta_boxes_book', 'global_notice_meta_box' );</code>
register_post_type()
函数用于自定义文章类型,其参数数组中包含register_meta_box_cb
,其值为在设置元框时调用的回调函数。
假设我们使用以下代码创建了一个名为“book”的自定义文章类型:
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', 'post' ); } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
在global_notice_meta_box
PHP 函数(上面register_meta_box_cb
的值)中添加add_meta_box()
函数定义将把元框添加到“book”自定义文章类型的编辑屏幕。
再次强调,这是我们的示例global_notice_meta_box
函数。
<code class="language-php">function global_notice_meta_box() { $screens = array( 'post', 'page', 'book' ); foreach ( $screens as $screen ) { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', $screen ); } } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
到目前为止,我们已经学习了在WordPress中注册或添加元框的各种方法。我们还需要创建global_notice_meta_box_callback
函数,该函数将包含我们元框的表单字段。
以下是global_notice_meta_box_callback
函数的代码,该函数将在元框中包含一个文本区域字段。
<code class="language-php">function global_notice_meta_box() { $screens = get_post_types(); foreach ( $screens as $screen ) { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback', $screen ); } } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
save_post
动作钩子处理在将文章保存为草稿或发布时保存到文本区域的数据。
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback' ); } add_action( 'add_meta_boxes', 'global_notice_meta_box' );</code>
为了使用在元框文本区域中输入的数据,我们将在显示其保存对应文章内容之前显示该数据。
<code class="language-php">function global_notice_meta_box() { add_meta_box( 'global-notice', __( '全局公告', 'sitepoint' ), 'global_notice_meta_box_callback' ); } add_action( 'add_meta_boxes_book', 'global_notice_meta_box' );</code>
代码解释
首先,我们创建了一个global_notice_before_post
函数,并将其挂接到the_content
过滤器,该过滤器带有一个$content
参数,其中包含文章内容。
在函数内部,我们包含了全局$post
变量,该变量包含当前正在查看的文章的WP_Post对象。
通过get_post_meta
检索针对给定文章保存的全局公告,并将其保存到$global_notice
变量中。
然后将公告包装在一个div中并保存到$notice
变量中。
最后,将包含全局公告的$notice
与包含实际文章内容的$content
连接起来。
以下是带有文章内容之前的全局公告的文章屏幕截图。
总结
在本教程中,我们学习了在WordPress管理屏幕中注册元框的多种方法,以及如何将它们限制在文章类型中。
我们还回顾了如何向元框添加表单字段,以及如何在保存或发布文章时保存输入的数据。
最后,我们介绍了如何将输入到元框中的数据付诸实践。
在未来的文章中,我们将介绍如何向文章类型管理屏幕添加上下文帮助选项卡。
如果您有任何问题或建议,欢迎在评论中提出。
WordPress中向文章类型添加元框的常见问题
什么是WordPress中的元框? WordPress中的元框是在管理界面中显示的可拖动框。这些框用于显示附加的输入字段,允许用户自定义不同类型文章的功能和布局。它们可以添加到文章、页面和自定义文章类型。元框可以包含各种类型的字段,包括文本、复选框、选择选项等等。
如何在WordPress中向自定义文章类型添加元框? 要向WordPress中的自定义文章类型添加元框,需要使用add_meta_box()
函数。此函数允许您指定元框ID、标题、回调函数、文章类型、上下文和优先级。回调函数用于输出元框的内容。
我能否向单个文章类型添加多个元框? 可以。每个元框都应具有唯一的ID,以避免冲突。您可以多次使用add_meta_box()
函数并使用不同的参数来添加多个元框。
如何保存输入到元框字段中的数据? 要保存输入到元框字段中的数据,需要将一个函数挂接到save_post
动作。此函数应检查nonce,验证当前用户的权限,然后使用update_post_meta()
或add_post_meta()
函数将元框数据保存到数据库。
如何在前端显示元框数据? 要在前端显示元框数据,可以在循环中使用get_post_meta()
函数。此函数从数据库检索元框数据并将其作为字符串返回,然后您可以在模板文件中将其输出。
我能否将元框添加到页面以及文章? 可以。使用add_meta_box()
函数时,可以将文章类型指定为“page”以向页面添加元框。
如何从文章类型中删除元框? 可以使用remove_meta_box()
函数。此函数需要元框ID和文章类型作为参数。
我能否自定义元框在文章编辑屏幕中的位置? 可以。add_meta_box()
函数的context
参数决定了元框的位置。可能的值为“normal”、“side”和“advanced”。
我能否将元框添加到插件创建的自定义文章类型? 可以。您只需要知道自定义文章类型的slug,然后将其用作add_meta_box()
函数中的post_type
参数。
如何设置元框及其字段的样式? 可以使用CSS设置元框及其字段的样式。元框将具有“postbox”类,您可以向元框中的字段添加您自己的类。然后,您可以在CSS中定位这些类以应用样式。
以上是在WordPress中添加元框的详细内容。更多信息请关注PHP中文网其他相关文章!