Übergeben Sie ein Komma-getrenntes Shortcode-Attribut an eine function

Ich habe versucht, einen Shortcode für das Category Ajax Chain Selects Plugin zu erstellen, so dass ich die Chain Selects innerhalb eines gewählten Posts / einer Seite einfach anzeigen kann, aber im Moment konnte ich die Attribute nur im Shortcode fest codieren:

function cross_ref_lookup_shortcode() { echo chainselect_getcategories( 'kla-competitor', 2, array('Select Manufacturer', 'Select Product'), array('Manufacturer', 'Product'), 'Find comparable product', '', 0 ); } add_shortcode( 'cross_ref_lookup', 'cross_ref_lookup_shortcode' ); 

Das funktioniert gut, und ich kann die Kettenauswahl anzeigen, wo ich möchte, aber ich möchte einen Shortcode erstellen, wo ich die Variablen als Shortcode-Attribute hinzufügen kann.

Die Verwendung der function chainselect_getcategories sieht folgendermaßen aus:

  

Ich bin weit genug gekommen, dass alles funktioniert, außer den Labels und Titeln, weil sie ein Array benötigen. Ich kann nicht herausfinden, wie man ein Shortcode-Attribut als ein Array an die function übergibt, so dass dies wie vorgesehen funktioniert. In meinem hartcodierten Beispiel oben funktionieren die Arrays, und das ist es, was ich aus dem Shortcode-Attribut neu erstellen muss. So weit ich gekommen bin:

 function chain_select_shortcode( $atts ) { extract( shortcode_atts( array( 'tax' => 'category', 'level' => 1, 'titles' => array( 'Please select…' ), 'labels' => '', 'btn_text' => 'Submit', 'exclude' => '', 'count' => 1 ), $atts ) ); return chainselect_getcategories( $tax, $level, explode( ',', $titles ), explode( ',', $labels ), $btn_text, $exclude, $count ); } add_shortcode( 'ajax_chain_select', 'chain_select_shortcode' ); 

Irgendwelche Ideen, wie man das vervollständigt?

Solutions Collecting From Web of "Übergeben Sie ein Komma-getrenntes Shortcode-Attribut an eine function"

$level muss als Integer übergeben werden, nicht als String.

Das Problem ist mit dem Plugin-Code:

 if (count($labels) !== $level && $labels !== '') { echo 'Category Chain Select PluginError :: Number of labels don\'t match number of levels'; 

Der Operator !== erfordert eine Übereinstimmung sowohl für den Typ als auch für den Wert. Hätte der Autor verwendet != Ein String-Wert für $level würde übereinstimmen. Der Test für $ titles verwendet == der den Typ nicht überprüft.

  if (count($titles) == $level) { 

Sie können diese Inkonsequenz auf den Autor des Plugins hinweisen.