1

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

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

(这不是我正在做的事情,但这似乎是我希望它如何工作的一个不错的例子)

想象一下,我们有一个“房屋”的 CPT,并且该 CPT 的自定义元选项之一是“卧室”——显然,不同的房屋有不同数量的卧室,所有这些都有不同的属性。所以,我希望能够允许用户添加关于卧室的几个不同属性,即

尺寸、外观、窗户​​数量和地板类型

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

我知道我需要一些 javascript 来添加这个工具(以及我不介意写的东西),但我在我可怜的、无用的大脑中苦苦挣扎的是如何将这些保存到数据库中。我想使用 WordPress 元数据来实现这一点,这样我就不会添加任何不必要的数据库表,而且我确信我可能无法完全理解如何保存数据的原则。

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

4

2 回答 2

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 语句将基于的钩子。

于 2010-10-29T19:51:47.640 回答
1

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

如果您有每个表单字段的名称,例如卧室[width]、卧室[num_windows]、卧室[bed_type] 等,您将在 post_meta 表中存储一个数组,因此当您获得房子卧室的帖子元数据时,它将返回一个数组数组(第一层代表房间,第二层代表房间的属性

如果您愿意,您甚至可以更进一步,将字段命名为卧室[i][属性],其中 i 是您在 JS 中维护的计数器。然后,您将只有一个用于所有卧室的帖子元数据

于 2010-10-23T16:57:40.857 回答