在Wordpress中,我试图从头开始创建一个元文件脚本,以便更好地理解Wordpress和PHP。
虽然我在多维数组上的每个循环都遇到了一些问题。我正在使用PHP5。
这是数组:
$meta_box = array();
$meta_box[] = array(
'id' => 'monitor-specs',
'title' => 'Monitor Specifications',
'context' => 'normal',
'priority' => 'default',
'pages' => array('monitors', 'products'),
'fields' => array(
array(
'name' => 'Brand',
'desc' => 'Enter the brand of the monitor.',
'id' => $prefix . 'monitor_brand',
'type' => 'text',
'std' => ''
)
)
);
这是每个循环:
foreach ($meta_box['pages'] as $post_type => $value) {
add_meta_box($value['id'], $value['title'], 'je_format_metabox', $post_type, $value['context'], $value['priority']);
}
我要做的是循环遍历'pages'数组中的键,这是'meta_box'数组中的一个数组,同时能够使用'meta_box'数组的键值。
我是否需要为每个循环嵌套一些?
非常感谢正确方向的一些指示,所以我可以解决这个问题。
答案 0 :(得分:1)
foreach
以$meta_box['pages']
开头,但没有$meta_box['pages']
。
你确实有$meta_box[0]['pages']
,所以你需要两个循环:
foreach($meta_box as $i => $box)
foreach($box['pages'] as $page)
add_meta_box(.., ..); // do whatever
您期望在$value
变量中出现什么?
答案 1 :(得分:1)
foreach ($meta_box[0]['pages'] as $post_type => $value) {
或
$meta_box = array(...
答案 2 :(得分:1)
这里:
$meta_box = array();
$meta_box[] = array(......
表示没有$ meta_box ['pages']。 meta_box是一个带有数字索引的数组(检查[]运算符),它的每个元素都是一个包含键'pages'的数组。
所以你需要在$ meta_box上使用foreach,并且在每个元素上你需要使用pages key .. id,title,context是与页面在同一级别的元素,如你所见
答案 3 :(得分:1)
您正在引用错误的数组键
$meta_box[] <-- $meta_box[0]
但是,你引用的是: -
foreach ($meta_box['pages'] as $post_type => $value) {
添加数组键将解决问题: -
foreach ($meta_box[0]['pages'] as $post_type => $value) {
答案 4 :(得分:1)
创建一些类来保存这些信息可能会很好。
class Metabox
{
public $id, $title, $context, $priority, $pages, $fields;
public function __construct($id, $title, $pages, $fiels, $context='normal', $priority='default')
{
$this->id = $id;
$this->title = $title;
$this->pages = $pages;
$this->fields = $fields;
$this->context = $context;
$this->priority = $priority;
}
}
$meta_box = array();
$meta_box[] = new Metabox(
'monitor-specs',
'Monitor Specifications',
array('monitors', 'products'),
array(
'name' => 'Brand',
'desc' => 'Enter the brand of the monitor.',
'id' => $prefix . 'monitor_brand',
'type' => 'text',
'std' => ''
)
);
现在,您可以遍历meta_box数组,如:
foreach ($meta_box as $box)
{
add_meta_box($box->id, $box->title, .. and more)
// This function could be placed in the metabox object
/* Say you want to access the pages array : */
$pages = $box->pages;
foreach ($pages as $page)
{
..
}
}
现在你仍然有一个循环循环,但也许有助于更清楚地看到你的问题。