【问题标题】:Advanced dynamic WordPress custom meta boxes高级动态 WordPress 自定义元框
【发布时间】:2010-10-23 16:32:02
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: wordpress meta-boxes


    【解决方案1】:

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

    然后,在上述文章的基础上,如果您想要每个自定义帖子类型的特定元框,您可以使用如下的一些 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 语句将基于的钩子。的

    【讨论】:

      【解决方案2】:

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

      如果您有每个表单字段的名称,例如 卧室[width]、卧室[num_windows]、卧室[bed_type]等,你可以在post_meta表中存储一个数组,所以当你得到房子卧室的post meta时,它会返回一个数组数组(第一个level代表房间,第二代表房间的属性

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

      【讨论】:

      • 很好,谢谢达米安。 “数组数组”这个短语吓坏了我(我更像是一个设计师而不是开发人员),但我想我明白你的想法了。我想知道是否有任何示例代码已经完成了这种功能。琢磨琢磨。非常感谢,Scrabble 先生姓氏。 (只是为了记录,我“知道”达米安,我不是混蛋;))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2015-01-21
      • 2017-05-01
      • 1970-01-01
      相关资源
      最近更新 更多