2011-12-07 3 views
1

Wordpressでは、WordpressとPHPの両方をよりよく理解するために、最初からmetaboxスクリプトを作成しようとしています。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' => '' 
       ) 
      ) 
     ); 

そして、これは、各forループ:私は何をしようとしていることは「ページ」配列のキーをループが

foreach ($meta_box['pages'] as $post_type => $value) { 
      add_meta_box($value['id'], $value['title'], 'je_format_metabox', $post_type, $value['context'], $value['priority']); 
     } 

あります'meta_box'配列内の配列であり、同時に 'meta_box'配列のキー値を使用することができます。

ループごとにいくつかネストする必要がありますか?

私はこれを解決できるように正しい方向にいくつかのポインタに感謝します。

+0

ページ内のこれらの項目で何をしたいですか? – Ikke

+0

$ meta_boxが配列を記述している場合、$ post_type 0,1と空の​​$ value ['context']、$ value ['priority']が得られます。しかし、あなたの方法では、$ meta_box ['pages']が空であるために空の配列にする必要があります。 – Anthony

+0

'WordpressとPHPの両方をよりよく理解するためです。 '[rant] Wordpressは[/ rant]から学ぶ最良のコードではありません。 –

答えて

1
foreach ($meta_box[0]['pages'] as $post_type => $value) { 

または

$meta_box = array(... 
+0

@ajrealからの回答と一緒に答えてくれました。私は '$ meta_box = array(...' – Brigante

1

foreach$meta_box['pages']で始まりますが、$meta_box['pages']はありません。

あなたはしかし$meta_box[0]['pages']を持っていないので、次の2つのループが必要です

foreach($meta_box as $i => $box) 
    foreach($box['pages'] as $page) 
     add_meta_box(.., ..); // do whatever 

あなたはあなたの$value変数であることを期待していましたの?

1

ここで、この:

$meta_box = array();  
$meta_box[] = array(...... 

一切の$ meta_box [ 'ページ']が存在しないことを示唆しています。 meta_boxは数値インデックスを持つ配列です([]演算子を確認してください)。各要素はキー 'pages'を持つ配列です。

ので、あなたは、$ meta_box上のforeachを使用する必要があり、各要素に対して、あなたはページキー... ID、タイトル、コンテキストを使用する必要があるあなたが見ることができるようにページと同じレベル上の要素、

1

ますキー配列間違っ

$meta_box[] <-- $meta_box[0] 

に参照されている。しかし、あなたが使用して参照してください: - :

-

foreach ($meta_box['pages'] as $post_type => $value) { 

が問題を解決する配列のキーを追加します。

foreach ($meta_box[0]['pages'] as $post_type => $value) { 
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) 
    { 
    .. 
    } 
} 

を持っていますが、おそらくより明確にあなたの問題を見に役立ちます。

+0

を使ってクラスを作成する方法を学ぶ必要があります!私の頭脳を理解できないようなものの1つです...うまくいけば、コードはずっとシンプルできれいです! – Brigante

+0

私はそこに住んでいます。私たちはこのようなことを "顕微鏡で叩く爪"と呼んでいます。 – k102