高级动态WordPress自定义元框

时间:2010-10-23 16:32:02

标签: wordpress-plugin wordpress meta-boxes

我正在创建一个创建多个自定义帖子类型(CPT)的插件(所有这些都可以正常工作)。其中一些CPT需要一个“自定义写入面板”,这基本上意味着它有一组自定义元框,而不是你的帖子或页面带来的沼泽标准“编辑”框。

其中一个CPT需要一组“动态”元框,这些元框基本上具有不确定的数值。我试着举个例子:

(这不是我正在做的,但它似乎是我喜欢它的工作方式的一个很好的例子)

想象一下,我们有一个'房屋'的CPT,这个CPT的一个自定义元选项是'卧室' - 显然,不同的房子有不同数量的卧室,所有房间都有不同的属性。所以,我希望能够让用户添加一些关于卧室的不同属性,即

尺寸,宽高比,窗户数量和地板类型

当用户为第一间卧室添加这些细节时,如果房子有第二间卧室,那么我希望他们有一个“添加卧室”按钮,并添加另一组这些元框,以便他们可以填写关于卧室2的详细信息。

我知道我需要一些javascript来添加这个功能(以及我不介意写的东西)但是我在我那可怜的,无用的大脑中正在努力的是如何将这些保存到数据库中。我想用WordPress元实现这一点,这样我就不会添加任何不必要的数据库表,我相信我可能无法理解如何保存数据的原则。

任何教程的指针都很精彩,或者已经非常感激地收到已经做过这类事情的一些插件示例。

2 个答案:

答案 0 :(得分:2)

这是关于创建元框的非常好的文章。

然后,在上面的文章的基础上,如果你想要每个自定义帖子类型的特定元框,你可以使用如下的一些if语句来实现这一点。

$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID']; $post = get_post($post_id);
$post_meta = array();
if ($post->post_type == 'hardware') { $post_meta[] = array( "type" => "text", "name" => "Input Example", "id" => $shortname."_input_one", "desc" => 'Description', "std" => '');

} elseif ($post->post_type == 'software') {
$post_meta[] = array( "type" => "textarea", "name" => "Text Area Example", "id" => $shortname."_textarea", "desc" => 'Description.', "std" => '', "rows" => "3"); $post_meta[] = array( "type" => "text", "name" => "Input Example", "id" => $shortname."_input_two", "desc" => 'Description', "std" => '', "rows" => "5"); }

$ post_id = ...有点设置你是IF语句将基于的钩子。<'s

答案 1 :(得分:1)

我认为最好的方法是在表单中使用数组。如果您只有一组保存到post_meta的值,您只能将它们链接回帖子(在本例中为house),但不能将哪些维度与哪种楼层类型匹配等

如果你有每个表单字段的名称 卧室[宽度],卧室[num_windows],卧室[bed_type]等,你会在post_meta表中存储一个数组,所以当你获得房子卧室的后置元数据时,它会返回一个数组数组(第一个)重新设置房间的等级,第二个代表房间的属性

如果你愿意,你甚至可以更进一步,并命名字段卧室[i] [属性],其中我是你在JS中维护的计数器。那么你只需要为所有卧室提供一块post meta