ACF 免费替代方案 CMB2【不维护】

CMB2是一个开发者工具包,用于为WordPress创建元框表、自定义字段和表单,让你大开眼界。 您可以轻松管理帖子、术语、用户、评论的元数据,或创建自定义选项页面。

CMB2 是对 WordPress 自定义元框和字段的完全重写。 要开始使用,请按照附带的example-functions.php文件中的示例操作,并查看基本使用说明

您可以在此查看可用字段类型的列表。

(起步入门参考:https://github.com/CMB2/CMB2/wiki/Basic-Usage)

功能

  • 创建元方框,用于帖子编辑界面。
  • 创建用于选项页面的表单。
  • 创建表单来处理用户元,并将其显示在用户配置文件添加/编辑页面上。
  • 创建表单来处理术语元,并在使用分类法的任何地方显示。
  • 灵活的应用程序接口(API)允许您在几乎任何地方使用 CMB 表单,甚至在前端也是如此。
  • 包含多种字段类型
  • 自定义 API 钩子允许你创建自己的字段类型。
  • 还有许多钩子和过滤器,让您可以修改库的许多方面(无需直接编辑)。
  • 支持大多数字段类型的可重复字段以及可重复字段组。
  • CMB2 可以安全地与任何项目捆绑。 它只会加载系统中的新版本。

翻译

如果您希望提供语言翻译文件,请通过WordPress 插件翻译进行。

文档

  • CMB2 文档可在 github 上的CMB2 维基中找到。 此外,如果您喜欢阅读代码和内联文档,我们会尽量保留所有函数和方法的内联文档。

第三方资源

Custom Field Types
其他有用资源

已知问题

  • 目前,包含所见即所得编辑器的元框无法移动或以可重复方式使用(这是 TinyMCE 的问题)。
  • 并非所有字段都能在可重复组中正常工作。

== 安装 ==

如果从 wordpress.org 安装插件:

  1. 将整个/CMB2目录上传到/wp-content/plugins/目录。
  2. 通过 WordPress 的 “插件 “菜单激活 CMB2。
  3. example-functions.php(如需要可重命名)复制到您的主题或插件目录中。
  4. 编辑后只包含您需要的字段,并重命名函数。
  5. 获利。

如果在插件或主题中包含库:

  1. 将 CMB 目录放在主题或插件中。
  2. example-functions.php复制(如有需要可重命名)到 CMB 目录上方的文件夹,或将其全部内容复制到主题的functions.php文件中。
  3. 编辑后只包含您需要的字段,并重命名函数(CMB 目录应保持不变,以便轻松更新库)。
  4. 收益。

== 常见问题 ==

常见问题通常会出现在github 维基中。

快速开始

打开example-functions.php并将所有代码复制/粘贴到 中functions.php。创建一个新页面,您应该会在页面编辑器中看到所有示例元框。使用get_post_meta()获取/使用数据。

入门

首先,您需要获取引导程序并启动引擎。为此,请将以下代码添加到functions.php。将 CMB2 包含在插件或主题中有一些注意事项。请在下面查看

注意:如果您从WordPress.org安装插件,则可以跳过此步骤,因为它由插件处理。

/**
 * Get the bootstrap!
 * (Update path to use cmb2 or CMB2, depending on the name of the folder.
 * Case-sensitive is important on some systems.)
 */
require_once __DIR__ . '/cmb2/init.php';

笔记:

  • init.php需要在任何 hook 之外被 require 。它需要尽早加载。
  • 不要进行任何类型的条件加载,例如if ( ! class_exists....。CMB2 将处理该加载。

创建元框

现在您已经包含了 CMB2 引擎,您可以开始使用以下代码添加元框functions.php

add_action( 'cmb2_admin_init', 'cmb2_sample_metaboxes' );
/**
 * Define the metabox and field configurations.
 */
function cmb2_sample_metaboxes() {

	/**
	 * Initiate the metabox
	 */
	$cmb = new_cmb2_box( array(
		'id'            => 'test_metabox',
		'title'         => __( 'Test Metabox', 'cmb2' ),
		'object_types'  => array( 'page', ), // Post type
		'context'       => 'normal',
		'priority'      => 'high',
		'show_names'    => true, // Show field names on the left
		// 'cmb_styles' => false, // false to disable the CMB stylesheet
		// 'closed'     => true, // Keep the metabox closed by default
	) );

	// Regular text field
	$cmb->add_field( array(
		'name'       => __( 'Test Text', 'cmb2' ),
		'desc'       => __( 'field description (optional)', 'cmb2' ),
		'id'         => 'yourprefix_text',
		'type'       => 'text',
		'show_on_cb' => 'cmb2_hide_if_no_cats', // function should return a bool value
		// 'sanitization_cb' => 'my_custom_sanitization', // custom sanitization callback parameter
		// 'escape_cb'       => 'my_custom_escaping',  // custom escaping callback parameter
		// 'on_front'        => false, // Optionally designate a field to wp-admin only
		// 'repeatable'      => true,
	) );

	// URL text field
	$cmb->add_field( array(
		'name' => __( 'Website URL', 'cmb2' ),
		'desc' => __( 'field description (optional)', 'cmb2' ),
		'id'   => 'yourprefix_url',
		'type' => 'text_url',
		// 'protocols' => array('http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet'), // Array of allowed protocols
		// 'repeatable' => true,
	) );

	// Email text field
	$cmb->add_field( array(
		'name' => __( 'Test Text Email', 'cmb2' ),
		'desc' => __( 'field description (optional)', 'cmb2' ),
		'id'   => 'yourprefix_email',
		'type' => 'text_email',
		// 'repeatable' => true,
	) );

	// Add other metaboxes as needed

}

注意:有关更多 metabox 示例,请参阅example-functions.php

以下是一个很酷的视频概述,介绍了该文件将提供的内容example-functions.php

使用插件创建元框

您还可以通过创建标准 WordPress 插件并将上述代码粘贴到插件标题下方来创建元框。

显示元数据

后,您需要能够提取元数据并使其发挥作用。在您的主题或插件文件中,使用 get_post_meta ()函数显示您的元数据。请记住,您必须传递帖子 ID!

<?php
// Grab the metadata from the database
$text = get_post_meta( get_the_ID(), 'yourprefix_text', true );

// Echo the metadata
echo esc_html( $text );
?>

假设您创建了一个包含上面列出的字段的元框,并希望在单页模板上显示它:

<?php
/**
 * The template for displaying all pages.
 *
 * This is the template that displays all pages by default.
 * Please note that this is the WordPress construct of pages
 * and that other 'pages' on your WordPress site will use a
 * different template.
 *
 * @package WordPress
 * @subpackage Twenty_Eleven
 * @since Twenty Eleven 1.0
 */

get_header(); ?>

		<div id="primary">
			<div id="content" role="main">

				<?php while ( have_posts() ) : the_post(); ?>

					<?php get_template_part( 'content', 'page' ); ?>

					<?php
					$text  = get_post_meta( get_the_ID(), 'yourprefix_text', true );
					$email = get_post_meta( get_the_ID(), 'yourprefix_email', true );
					$url   = get_post_meta( get_the_ID(), 'yourprefix_url', true );
					echo esc_html( $text );
					echo is_email( $email );
					echo esc_url( $url );
					?>

					<?php comments_template( '', true ); ?>

				<?php endwhile; // end of the loop. ?>

			</div><!-- #content -->
		</div><!-- #primary -->

<?php get_footer(); ?>

有关使用帖子元数据的更多信息,请参阅 Codex 页面中的get_post_meta(),或查看Post Meta Bootcamp。请记住,转义所有数据!使用帖子元数据时使用适当的数据验证是正确的做法。不要相信任何人!

有关更多示例代码,请参阅example-functions.php

将元框添加到用户个人资料

要将自定义元框添加到用户个人资料页面,您可以将参数设置object_types为,array( 'user' )以指示元框应显示在用户个人资料上(而不是特定的帖子类型),并且元信息应存储在 user_meta 而不是 post_meta 中。

可以在example-functions.php中看到一个示例元框

请注意,Metaboxdescriptionname参数不会显示。您可以通过添加title字段作为第一个字段来标记用户设置部分。

捆绑和包含 CMB2 的注意事项。

本节重点介绍包含 CMB2 时的一些注意事项。CMB2 有一种智能方法,可以只加载其自身的一个版本,而且只加载新版本(我们还严格承诺向后兼容,以便新版本不会破坏使用以前版本构建的代码)。如果您没有正确包含它,可能会导致意想不到的后果。有关 CMB2 如何/为何这样做的更多背景信息,请阅读此帖子

  • 要做:直接从主题或插件中包含文件。例如: require_once __DIR__ . ‘/includes/cmb2/init.php’;
  • 不要:包含来自钩子的文件。例如: // DON’T DO THIS add_action( ‘init’, ‘wprpt_initialize_cmb_init’, 10 ); function wprpt_initialize_cmb_init() { require_once __DIR__ . ‘/includes/cmb2/init.php’; }
  • 要做:对包含文件使用区分大小写的路径。例如: require_once __DIR__ . ‘/includes/CMB2/init.php’;或者 require_once __DIR__ . ‘/includes/cmb2/init.php’;如果您从 WordPress 插件仓库下载 CMB2,它将是一个小写的目录,cmb2。但是,由于 Github 的命名约定,如果您克隆此仓库,或下载它,或在发布页面上下载发布版本,它将是一个大写的目录,CMB2。显然,当您将其捆绑/包含在主题或插件中时,您可以将目录命名为您想要的任何名称。
  • 不要:在包含之前进行class_exists()检查。(CMB2 可以自行处理该魔法。) // DON’T DO THIS if ( ! class_exists( ‘Some_CMB2_Class’ ) ) { require_once __DIR__ . ‘/includes/cmb2/init.php’; }
  • 要做:使用正确的 CMB2 包。Composer是一种不错的推荐方式,但如果您要将 CMB2 捆绑到主题/插件中,请从WordPress 插件库下载 zip 文件。
  • 不要:将 repo 克隆到您的项目中。您将克隆所有仅用于开发的文件/文件夹。如果将您的主题与 CMB2 捆绑在一起提交到 WordPress 主题 repo,您​​可能会因包含这些开发文件而被拒绝。
滚动至顶部
扫描微信二维码联系我们 关闭