0

在 PHP 世界中,在 HTML 表单中执行以下操作是非常正常和正常的:

<input type="text" name="data[name][first]" />
<input type="text" name="data[name][last]" />
<input type="text" name="data[address][street]" />
<input type="text" name="data[address][city]" />

然后,在你的$_POST变量中,你会得到一个类似这样的数组:

data = array (
  'name' => array (
    'first' => value,
    'last' => value
  ),
  'address' => array (
    'street' => value,
    'city' => value
  )

然后,您可以使用 var 中的这些名称来访问它们,即$firstName = $_POST['data']['name']['first'];.

我的问题是这在 Wordpress 中根本不起作用。我得到的错误是该trim()函数不能在数组上使用。

parse_query我已经追踪了“为什么”它确实适用于对象函数中的以下代码WP_Query

$qv['p'] =  absint($qv['p']);
        $qv['page_id'] =  absint($qv['page_id']);
        $qv['year'] = absint($qv['year']);
        $qv['monthnum'] = absint($qv['monthnum']);
        $qv['day'] = absint($qv['day']);
        $qv['w'] = absint($qv['w']);
        $qv['m'] = absint($qv['m']);
        $qv['paged'] = absint($qv['paged']);
        $qv['cat'] = preg_replace( '|[^0-9,-]|', '', $qv['cat'] ); // comma separated list of positive or negative integers
        $qv['pagename'] = trim( $qv['pagename'] );
        $qv['name'] = trim( $qv['name'] ); /* Throws trim() error on array! */
        if ( '' !== $qv['hour'] ) $qv['hour'] = absint($qv['hour']);
        if ( '' !== $qv['minute'] ) $qv['minute'] = absint($qv['minute']);
        if ( '' !== $qv['second'] ) $qv['second'] = absint($qv['second']);
        if ( '' !== $qv['menu_order'] ) $qv['menu_order'] = absint($qv['menu_order']);

谁能想到一种在 WordPress 中正确使用数组作为字段名称的方法?在 WP 之外似乎是一种常见的做法,但在其中却是不可能的?也许表单名称可以替代“最佳实践”?

4

1 回答 1

1

当我更改字段的名称,特别是数组的“基础”时,解决方案就出现了。

在我提供的示例中,它是data,它有几个元素。在这种情况下,data碰巧也是我在插件中使用 WordPress 注册的自定义帖子类型。我不知道究竟发生了什么或为什么,但它在某处很长的地方将我的数组与应该查询的内容混合在一起,很可能是因为名称冲突。

问题解决了!

于 2013-09-15T04:09:21.540 回答