我正在创建一个创建多个自定义帖子类型(CPT)的插件(所有这些都可以正常工作)。其中一些CPT需要一个“自定义写入面板”,这基本上意味着它有一组自定义元框,而不是你的帖子或页面带来的沼泽标准“编辑”框。
其中一个CPT需要一组“动态”元框,这些元框基本上具有不确定的数值。我试着举个例子:
(这不是我正在做的,但它似乎是我喜欢它的工作方式的一个很好的例子)
想象一下,我们有一个'房屋'的CPT,这个CPT的一个自定义元选项是'卧室' - 显然,不同的房子有不同数量的卧室,所有房间都有不同的属性。所以,我希望能够让用户添加一些关于卧室的不同属性,即
尺寸,宽高比,窗户数量和地板类型
当用户为第一间卧室添加这些细节时,如果房子有第二间卧室,那么我希望他们有一个“添加卧室”按钮,并添加另一组这些元框,以便他们可以填写关于卧室2的详细信息。
我知道我需要一些javascript来添加这个功能(以及我不介意写的东西)但是我在我那可怜的,无用的大脑中正在努力的是如何将这些保存到数据库中。我想用WordPress元实现这一点,这样我就不会添加任何不必要的数据库表,我相信我可能无法理解如何保存数据的原则。
任何教程的指针都很精彩,或者已经非常感激地收到已经做过这类事情的一些插件示例。
答案 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