17713433920 info@mac163.com

在过去的几年中,WordPress确实已经发展成为功能完善的内容管理系统,并且当您真正释放其某些功能时,您才意识到WordPress可以用于几乎任何类型的网站。

我的尤里卡时刻来到了,当时一位客户要求我为他建立一个订单跟踪系统。从历史上看,他从销售代表那里订购医疗设备,并手动完成所有文书工作。然后,他将整天花在电话上,接听代表的电话以下达新订单或检查现有订单的状态。

好吧,他试图通过创建一个可以输入所有订单的网站来更改所有这些内容,然后他的客户可以随意检查其状态,甚至可以在订单中更新新信息时获得电子邮件更新。当时的想法是,他将有更多时间实际发展自己的业务,而不是花一整天时间在电话上做管理员工作。

自定义帖子类型

他的问题的答案在于自定义帖子类型的强大功能。标准WordPress网站有两种类型的帖子:帖子和页面,但是您可以根据需要添加任意数量。您甚至可以从主题或插件中获得一些支持事件,房地产清单,产品或滑块之类的内容。

在这种情况下,我需要为其订单创建一个自定义帖子类型。然后,这些将容纳每个订单的信息,这些信息将显示在前端,供他的客户查看。

我不会介绍创建自定义帖子类型的过程,因为我已经在另一个教程:  注册自定义帖子类型中进行了介绍

我要在这里讨论的是如何组织数据并以所需方式显示它。例如,标准的WordPress编辑器并不适合记录这些订单,因为它没有单独的区域来存储构成订单的所有小信息,例如患者姓名,订单号和订单代表。在网站的前端以及通过电子邮件发送给代表的邮件中都会被调用。

这就是Custom Meta Boxes出现的地方。CustomMeta Boxes允许您在编辑器中创建新的“窗口”以存储特定信息。因此,尽管帖子编辑器为您的帖子内容提供了一个巨大的框,但您可能不需要自定义帖子类型,因为我没有使用订单自定义帖子类型。这样,当我注册自定义帖子类型时,我关闭了编辑器,这样我就可以完全控制数据输入屏幕,如下所示。

自定义元框

自定义元框  是一个脚本,使创建这些元框的过程变得异常简单。此外,它采用了一些更复杂的字段类型(例如颜色选择器,日期选择器和WYSIWYG编辑器)并为您完成了所有编码,因此您要做的就是指定每个字段应为哪种类型,并且它将神奇地出现。

在主题或插件中包含它是一个非常简单的过程。您所需要做的就是从GitHub存储库下载文件   ,并将其复制到您自己的主题或插件文件夹结构中。我建议将文件放在库或包含文件夹中,以便更好地组织。在我的插件中,我将所有文件上传到/ wp-content / plugins / my-plugin / includes / metabox /中。

一旦将所有文件和文件夹上载到您选择的位置,“激活”它们并使它们可用的所有您需要做的就是从插件中包含init.php。例如,在我的示例中,以下函数包含在主插件文件中,以调用/ includes / metabox /文件夹中的init.php:

function be_initialize_cmb_meta_boxes() {
	if ( !class_exists( 'cmb_Meta_Box' ) ) {
		require_once( 'includes/metabox/init.php' );
	}
}

add_action( 'init', 'be_initialize_cmb_meta_boxes', 9999 );

现在,您可以实际使用脚本提供的功能了。example-functions.php是开始学习脚本工作原理的好地方。它提供了一个示例示例,其中包含了脚本允许的每种类型的字段。您可以选择的字段类型包括:

  • 标题(用于在仪表板中组织元框)
  • 文字(小,中,大)
  • 日期选择器(标准或UNIX时间戳)
  • 货币
  • 文字区域(大小)
  • 落下
  • 单选按钮(嵌入式和标准)
  • 复选框(单个和多个)
  • 所见即所得编辑器
  • 分类选择器(下拉菜单,复选框或单选按钮)
  • 文件上传器
  • 档案清单

您只需要确定要记录的信息以及每种情况下最好的字段类型即可。

为了向您演示此脚本,我将使用比之前提到的订购系统更简单的示例,因为它更复杂。我最近写了一个插件,用于创建一个简单的警报系统,管理员可以在其中指定警报的标题,警报的优先级,警报的描述以及解决方法。

为了解决这个问题,我使用了警报标题的标题,行内单选按钮设置优先级,并使用WYSIWYG编辑器编写了描述和解决方案(允许轻松进行丰富的编辑,例如项目符号列表和文本格式)。

以下功能是实现该功能的所有代码:您将注意到它遵循example-functions.php文件的格式。我将在下面描述代码的每个部分:

function twpb_alerts_metaboxes( $meta_boxes ) {
	$prefix = 'twpb_alert_'; // Prefix for all fields
	$meta_boxes[] = array(
		'id' => 'alert_metabox',
		'title' => 'Alert Information',
		'pages' => array('twpb_alerts'), // post type
		'context' => 'normal',
		'priority' => 'high',
		'show_names' => true, // Show field names on the left
		'fields' => array(
			array(
				'name'    => 'Priority',
				'desc'    => '',
				'id'      => $prefix . 'priority',
				'type'    => 'radio_inline',
				'options' => array(
					array( 'name' => 'High', 'value' => 'high', ),
					array( 'name' => 'Medium', 'value' => 'medium', ),
					array( 'name' => 'Low', 'value' => 'low', ),
				),
			),
			array(
				'name'    => 'Description of issue',
				'desc'    => 'Enter a description of what the issue is.',
				'id'      => $prefix . 'description',
				'type'    => 'wysiwyg',
				'options' => array(	'textarea_rows' => 5, ),
			),
			array(
				'name'    => 'Proposed resolution',
				'desc'    => 'Inform users how they can resolve the issue.',
				'id'      => $prefix . 'resolution',
				'type'    => 'wysiwyg',
				'options' => array(	'textarea_rows' => 5, ),
			),
		),
	);

	return $meta_boxes;
}
add_filter( 'cmb_meta_boxes', 'twpb_alerts_metaboxes' );

在第2行中,我为自定义字段设置了一个唯一的前缀,以避免与任何其他插件发生冲突。在第4行中,我为该元框提供了一个唯一ID,该ID将出现在仪表板的自定义帖子类型中。第5行设置了metabox的标题,第6行设置了显示这些metabox的自定义帖子类型。由于它是一个数组,因此您可以根据需要在任意数量的帖子类型中包括它,包括帖子和页面。

第10行开始我要创建的字段的数组。在此示例中,只有三个字段(第11-21、22-28和29-35行)。每个字段都包含有关该字段是什么的基本信息,该字段的唯一ID,描述以及适当的一些选项。

然后,第39行使metaboxs显示,第41行与我们最初上传的脚本挂钩,以使其起作用。

结果?

那看起来像什么呢?好吧,在编辑器窗口中,您将得到如下所示的内容:

edit-alert-custom-meta-boxes
edit-alert-custom-meta-boxes

因此,我们现在已经确定了如何构建元框并使用不同的字段类型来收集所需的信息。现在我们需要在前端显示它。

显示信息

现在,该信息针对数据库中的每个帖子进行存储。但是,除非我们调用它,否则它将仅保留在数据库中并且保持无用。为了显示信息,我们需要使用get_post_meta函数,该函数从数据库中检索给定帖子的帖子元。

举个简单的例子,我们可以在三个单独的实例中使用get_post_meta函数提取我们存储的每条信息(优先级,描述和分辨率)。

<h2>Priority: <?php echo get_post_meta( $post->ID, 'twpb_alert_priority', true ); ?></h2>
<h3>Description</h3>
	<?php echo get_post_meta( $post->ID, 'twpb_alert_description', true ); ?>
<h3>Resolution</h3>
	<?php echo get_post_meta( $post->ID, 'twpb_alert_resolution', true ); ?>

在每种情况下,我们都传递要获取的每条元数据的帖子ID和唯一ID(回想一下,我们在上一个函数中设置了这些ID)。

然后将按照以下方式在前端产生结果:

进一步了解

这是一个非常简单的示例,但是只要稍加想象,您就可以看到它的强大之处。回到我的订单跟踪系统的原始示例,该插件用于记录患者信息(姓名,地址,出生日期)和订单信息(订购的商品,价格,订单号,运输公司,跟踪号,订单记录)并订购文件,例如发票)。再加上  电子邮件通知,它可能是一个非常全面的工具。

一旦您开始揭示WordPress内置的此类强大功能(乍一看似乎有些难以理解),您就会意识到它的强大之处。希望诸如Custom Meta Boxes之类的工具   能够鼓励您开始研究并开始开发自己的高度定制化的网站。


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部