wake-up-neo.com

Ausgewählte Mehrfachauswahlelemente als "ausgewählt" festlegen

Ich entwickle ein Designeinstellungsfenster für ein neues WordPress-Design, in dem die Option zum Ausschließen von Kategorien von der Anzeige in der Schleife enthalten ist. Ich habe es geschafft, die Hauptfunktionalität zum Laufen zu bringen, indem ich ein Auswahlkästchen verwendet und die Werte als Array gespeichert habe ...

<?php $cats = get_categories('hide_empty=0&orderby=name'); ?>
<select name="<?php echo $option['id']; ?>[]" id="<?php echo $option['id']; ?>" multiple="multiple">  
    <option value="0">None (don't exclude anything)</option>
    <?php foreach ($cats as $cat_list ) { ?>
        <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( $selected, $cat_list->cat_ID ); ?>><?php echo $cat_list->cat_name; ?></option> 
    <?php } ?>
</select>

ich kann jedoch nicht verstehen, wie jedes Element in der foreach()-Schleife überprüft wird, ob sein Wert mit einem Wert im Array mit den gespeicherten Werten übereinstimmt. Wenden Sie dann selected="selected" an, wenn es true zurückgibt. Ich verstehe die Funktion selected() wp, verstehe aber nicht, wie ich sie in diesem Fall verwenden soll (mehrere Werte in der Schleife foreach()).

Jede Hilfe wird geschätzt, ich bin ein n00b, also vergib mir, wenn es eine dumme Frage ist :)

1
user8220

Ich gehe davon aus, dass Ihre $selected-Variable ein Array von Werten für die aktuell ausgewählten Elemente enthält.

In diesem Fall können Sie selected nicht verwenden (mit Mehrfachauswahlfeldern), da nur zwei Zeichenfolgen verglichen werden. Es wird nicht geprüft, ob sich der Wert in einem Array befindet. Verwenden Sie stattdessen eine ternäre Anweisung und in_array()

<?php 
foreach ($cats as $cat_list ) { 
$selected = in_array( $cat_list->cat_ID, $selected ) ? ' selected="selected" ' : '';    
?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php echo $selected; ?>><?php echo $cat_list->cat_name; ?></option> 
<?php } ?>
2
chrisguitarguy

Ich weiß, dass dies eine alte Frage ist, aber die Antwort wurde nicht mit der Kernfunktion beantwortet ...

Hier ist es:

$cats = get_categories('hide_empty=0&orderby=name'); ?>
<select name="<?php echo $option['id']; ?>[]" id="<?php echo $option['id']; ?>" multiple="multiple">
<option value="0">None (don't exclude anything)</option>
<?php foreach ( $cats as $cat_list ) { ?>
    <option value="<?php echo $cat_list->cat_ID; ?>" <?php selected( true, in_array($cat_list->cat_ID, $selected ) ); ?>><?php echo $cat_list->cat_name; ?></option>
<?php } ?>
</select>

Stellen Sie sicher, dass $selected ein Array ist, das ausgewählte Kategorie-IDs enthält.

2
Paolo

Das Q ist nicht dumm. Ich bin nur so verwirrend, wie es dokumentiert ist. Ich erinnere mich auch, dass irgendwo im Codex geschrieben steht, dass die Verwendung von selected() und ähnlichen Dingen ein Muss ist (!). Ich stimme nicht zu.

Wie auch immer: selected( 'one_value', 'val_to_compare_with', true );

0
kaiser