Shortcode IF-Statement-Hilfe

Unten ist der Code, an dem ich gearbeitet habe, um einen Shortcode auszuführen. Ich habe versucht, eine if() Aussage zu implementieren, aber nichts hat funktioniert.

Ich habe zwei Ausgänge. Was ich zu tun suche, sind die Attribute

 ('img', 'user', 'text') 

$output1 vorhanden, Anzeige $output1 .

Ansonsten, wenn die Attribute

 ('img', 'text', 'length', 'material', 'power') 

$output2 vorhanden, Anzeige $output2 .

 function hire_equipment_func($atts) { extract( shortcode_atts( array( 'img' => '', 'user' => '', 'text' => '', 'length' => '', 'material' => '', 'power' => '', ), $atts ) ); $atts = array_change_key_case((array)$atts, CASE_LOWER); return $output1; $output1 = '

' . $atts['user'] . '
' . $atts['text'] . '
'; $output2 = '

' . $atts['user'] . '
Length: Material: Power:
' . $atts['length'] . ' ' . $atts['material'] . ' ' . $atts['power'] . '
'; } add_shortcode( 'hire_equipment', 'hire_equipment_func' );

Jede Hilfe mit diesem würde sehr geschätzt werden!

Solutions Collecting From Web of "Shortcode IF-Statement-Hilfe"

Ich bin mir nicht wirklich sicher, ob ich die Frage verstehe. Sie möchten unterschiedliche $atts anzeigen, je nachdem, welche Felder im Array $atts ? Wenn dies der Fall ist, sollte dies funktionieren:

 // Check so fields are set in the `$atts` array. if (isset($atts['img'], $atts['user'], $atts['text'])) { return '

' . $atts['user'] . '
' . sanitize_text_field($atts['text']) . '
'; } elseif (isset($atts['img'], $atts['text'], $atts['length'], $atts['material'], $atts['power'])) { // Second output goes here. }

Beachten Sie, dass der user im zweiten Fall möglicherweise nicht festgelegt wird, da andernfalls die erste Bedingung immer wahr ist.

Da das Markup für beide Bedingungen sehr ähnlich ist, könnte ein besserer Ansatz sein:

 function hire_equipment_func($atts) { // Store merged result. $atts = shortcode_atts(array( 'img' => '', 'user' => '', 'text' => '', 'length' => '', 'material' => '', 'power' => '', ), array_change_key_case($atts, CASE_LOWER)); $output = '
'; } // Check if user should be appended to output. if (isset($atts['user'])) { $output .= '
' . $atts['user'] . '
'; } // Check if text should be appended to output. if (isset($atts['text'])) { $output .= '
' . $atts['text'] . '
'; } // Check if we need to output more-information table. if (isset($atts['length']) || isset($atts['material']) || isset($atts['power'])) { $output .= '
Length: Material: Power:
' . (isset($atts['length']) ? $atts['length'] : '') . ' ' . (isset($atts['material']) ? $atts['material'] : '') . ' ' . (isset($atts['power']) ? $atts['power'] : '') . '
'; } $output .= '
'; return $output; }

Sie müssen möglicherweise auch eine sanitazion für Ihre Ausgabe verwenden. Verwenden esc_url() zum Beispiel esc_url() für URLs und sanitize_text_field sanitize_text_field() für Strings und so weiter.