2012-03-28 11 views
1

Ich erstelle mehrere Meta-Boxen in WordPress, und ich möchte der Benutzer in der Lage sein, bestimmte Boxen ein- oder auszuschalten.Zugriff auf die 'Wert'-Tasten in einem mehrdimensionalen Array?

Sie klicken also auf eine Optionsschaltfläche (in einer separaten Metabox), aktualisieren die Optionen und eine zusätzliche Metabox, die an diesen Funkwert angehängt ist, wird angezeigt.

Also geht es im Grunde von einer Meta-Box (die Auswahlbox) zu zwei Meta-Boxen (die Auswahlbox, UND die neue Box, die sie gerade ausgewählt).

In meinem Code, können Sie eine Meta-Box erstellen, indem Sie so etwas wie diese (dies ist das Funkfeld, in dem der Benutzer für andere Meta-Box wechseln on/off) Einstellung:

// Create meta box that gives user ability to select additional meta box, 
// which will then show upon saving the post 

$meta_boxes[] = array(
    'id' => 'meta_box_id', 
    'title' => 'Box title', 
    'pages' => array('page'), 
    'context' => 'side', 
    'priority' => 'low', 
    'fields' => array(
     array(
      'name' => 'Select:', 
      'id' => $prefix . 'meta_box_id', 
      'type' => 'radio', 
      'options' => array(
       array('name' => 'Value 1', 'value' => 'value_one'), 
       array('name' => 'Value 2', 'value' => 'value_two'), 
      ) 
     ) 
    ) 
); 

Hier wie es in Wordpress aussieht:

Box title in WordPress

Und hier ist eine andere Meta-Box, die einmal oben in der Meta-Box ausgewählt (sagen wir mal value_one ausgewählt ist), auf der Post-Display erscheint:

// This meta box will only show if 'value_one' is selected from 
the radio box above 

$meta_boxes[] = array(
    'id' => 'standard_lead', 
    'title' => 'Standard Lead', 
    'pages' => array('page'), 
    'context' => 'normal', 
    'priority' => 'high', 
    'lead' => 'value_one', 
    'fields' => array(
     array(
      'type' => 'text', 
      'id' => $prefix . 'standard_title', 
      'name' => 'Lead Title', 
      'desc' => 'The title of your Standard Lead', 
      'width' => '100' 
     ), 
     array(
      'type' => 'textarea', 
      'id' => $prefix . 'standard_content', 
      'name' => 'Lead Content', 
      'desc' => 'The content of your Standard Lead (you can use HTML)', 
      'width' => '100' 
     ) 
    ) 
); 

Das wichtige Stück von diesem Code ist dies:

'lead' => 'value_one', 

Mein Plan den [ 'Blei'] Wert (aus dem Meta-Box-Code direkt oben) zu haben war die [ 'value'] entspricht Wert (aus der Radio-Meta-Box), so dass sie verbunden werden konnten, und dann mit einer IF-Anweisung testen, um sicherzustellen, dass sie gleich sind, und dann NUR anzeigen, wenn sie beide value_one gleich sind.

Die Funktion unten fügt die Meta-Boxen in WordPress hinzu. Innerhalb dieser Funktion habe ich versucht, diese IF-Anweisung zu schaffen diese beiden zusammen zu passen:

if($this->_meta_box['value'] == $this->_meta_box['lead']) 

aber es funktioniert nicht, und ich bin nicht sicher, wie [ ‚value‘] zum Ziel, wie es in mehreren Arrays verschachtelt ist (oder ich nehme an, ist das Problem).

Hier ist die volle Funktion:

function add_meta_boxes() 
{ 
    $this->_meta_box['context'] = empty($this->_meta_box['context']) ? 'normal' : $this->_meta_box['context']; 
    $this->_meta_box['priority'] = empty($this->_meta_box['priority']) ? 'high' : $this->_meta_box['priority']; 

    foreach($this->_meta_box['pages'] as $page) 
    { 
     if($this->_meta_box['value'] == $this->_meta_box['lead']) 
     { 
      // adds meta box to WP 
      add_meta_box($this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show_meta_boxes'), $page, $this->_meta_box['context'], $this->_meta_box['priority']); 
     } 
    } 
} 
+0

Woher bekommen Sie '$ this -> _ meta_box'? Was sind die Inhalte dieses Arrays? – jeremyharris

+0

@jeremyharris Ich habe eine foreach 'foreach ($ meta_boxes als $ meta_box)' erstellt, die jede Instanz von 'meta_boxes []' verwendet und daraus Werte abliest. –

Antwort

0

Für den Zugriff auf mehrdimensionale Array-Werte in PHP, verwenden Sie die folgende Syntax:

$arrayVar['key1']['key2']; 

Also den 'Wert' Schlüssel in der ersten Array zuzugreifen , tun Sie es so:

$this->_meta_box['fields']['options']; 
/* returns 
array(
    array('name' => 'Value 1', 'value' => 'value_one'), 
    array('name' => 'Value 2', 'value' => 'value_two'), 
); 
*/ 
// to get the first option's value 
$this->_meta_box['fields']['options'][0]['value']; 
// to get the second option's value 
$this->_meta_box['fields']['options'][1]['value']; 
+0

Das hilft mir, ein bisschen besser zu verstehen. Aber wenn ich die IF-Anweisung zu geändert habe 'if ($ this -> _ meta_box ['fields'] ['Optionen'] [0] ['value'] == $ this -> _ meta_box ['lead'])' ... nichts geändert. Ich glaube, mir fehlt noch etwas. Wenn Sie die vollständige Codedatei sehen möchten, um Ihren Kopf besser darin zu verpacken, kann ich es zur Verfügung stellen. –

+0

Ich bin vielleicht ein wenig unklar bei dem, was Sie versuchen zu tun. Ich bekomme, dass Sie versuchen, eine Meta-Box basierend auf einer ausgewählten Radio-Option zu zeigen. Wie erhalten Sie den ausgewählten Radiowert und wo speichern Sie ihn?Dies ist PHP-Code, also wenn der Benutzer eine Option auswählt, muss er etwas tun, um es zu ändern. Sie könnten besser JS verwenden, um die Metaboxen ein-/auszublenden. – jeremyharris

+0

Ja, du hast es verstanden. Und genau das versuche ich zu tun: Erhalte den Wert, der in der IF-Anweisung verwendet werden soll. Ich dachte, es wäre im Array ['value'] gespeichert, und ich könnte es einfach so nennen, wie Sie es vorgeschlagen haben. Aber ich denke, ich mache etwas falsch oder vermisse etwas (klar, ich bin ein wenig auf der Anfänger-Seite von PHP). Die JS-Lösung klingt eleganter, ich werde nachforschen, um zu sehen, wie dies als Alternative getan werden kann (wenn Sie irgendwelche Vorschläge haben, wäre das auch großartig). Danke für die Hilfe bis jetzt Jeremy! –

Verwandte Themen