代码之家  ›  专栏  ›  技术社区  ›  RichardTape

高级动态WordPress自定义元框

  •  1
  • RichardTape  · 技术社区  · 16 年前

    我正在创建一个插件,它创建了几个自定义post类型(CPT)(所有这些都工作得很好)。其中一些cpt需要一个“自定义编写面板”,这基本上意味着它有一组自定义的元框,而不是您的文章或页面中的bog标准“编辑”框。

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

    (这不是我要做的,但它似乎是一个很好的例子,说明了我希望它如何工作)

    假设我们有一个由“houses”组成的CPT,这个CPT的一个自定义元选项是“bedrooms”——显然,不同的房子有不同数量的卧室,所有的卧室都有不同的属性。因此,我希望能够允许用户添加关于卧室的几个不同属性,即。

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

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

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   Damian Jakusz-Gostomski    16 年前

    我认为最好的方法是在表单中使用数组。如果您刚刚有一个保存到post_meta的值集合,那么您只能将它们链接回post(在本例中是house),而不能将哪个尺寸与哪个楼层类型匹配等

    卧室[width]、卧室[num_windows]、卧室[bed_type]等,你会在post_meta表中存储一个数组,所以当你得到一个房子卧室的post meta时,它会返回一个数组数组(第一级表示房间,第二级表示房间的属性

    如果您愿意的话,您甚至可以更进一步,将字段命名为bedrooms[i][attribute],其中i是您在JS中维护的计数器。那么你就只有一张所有卧室的邮政信箱了

        2
  •  2
  •   cnix    16 年前

    这里有一篇关于创建元框的非常好的文章。

    然后,在上述文章的基础上,如果您希望每个自定义post类型都有特定的元框,那么可以使用如下一些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"); }

    这个 $邮政id=