Wordpress - Нужно объединить / найти массив [0] -> slug, [1] -> slug, et c внутри foreach () - PullRequest
0 голосов
/ 26 марта 2020

В этом конкретном коде у меня есть поле <select multiple="multiple"> (с использованием select2.js) в моем административном бэкэнде в пользовательском типе поста с пользовательскими таксономиями. Все в этой области работает, как ожидалось. У меня проблемы с отображением нескольких выбранных вариантов, так как я не знаю, как правильно настроить массив и / или если код правильный.

Я включил var_dump(), поскольку это показывает, что оба значения сохранены, но отображается только первое. Я знаю, что это из-за кода (( $breed->slug == $select_breed[0]->slug ) ? 'selected="selected"' : '' ), но я не знаю, как сделать ту же строку кода, например: $select_breed[ALL/ANY]->slug, так как иногда они могут выбрать 1, 2, 3, 4 или 5 различных значений. Некоторая помощь с этой строкой кода была бы очень признательна!

_N.B. С помощью @CBroe я включил array_column() и in_array(), чтобы сформулировать рабочий код. Любые другие предложения приветствуются. Я включил результаты в качестве ответа.

КОД

<?php
/**
 * Pet Breed
 */         
$breed_args = get_terms( array (
    'taxonomy' => 'breed_taxonomy',
    'hide_empty' => false
));

$select_breed = get_the_terms( get_the_ID(), 'breed_taxonomy' );
?>
<div class="section group">
    <div class="col full">
        <label for="pet_breed"><strong><?php _e( 'Pet Breed', 'audar_pets' ); ?> <abbr class="required" >*</abbr></strong><br />
        <select id="pet_breed" class="taxonomy-select" name="pet_breed[]" multiple="multiple" style="width: 100%;" required="required" required >
            <option></option>
            <?php
            if ( !empty( $breed_args ) ) :

                foreach( $breed_args as $breed ) :

                    echo '<option value="' . $breed->slug . '" ' . (( $breed->slug == $select_breed[0]->slug ) ? 'selected="selected"' : '' ) . ' >' . $breed->name . '</option>';

                endforeach;

            endif;
            ?>
        </select>
        </label>
        <?php
        $pet_breed = get_the_terms( get_the_ID(), 'breed_taxonomy' );
        var_dump( $pet_breed );
        ?>
    </div>
</div>

SAVE

wp_set_post_terms( get_the_ID(), $_POST['pet_breed'], 'breed_taxonomy', false );

РЕЗУЛЬТАТЫ VAR_DUMP ($ PET_BREED)

array(2) {
  [0]=>
  object(WP_Term)#16459 (10) {
    ["term_id"]=>
    int(153)
    ["name"]=>
    string(19) "German Shepherd Dog"
    ["slug"]=>
    string(19) "german-shepherd-dog"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(153)
    ["taxonomy"]=>
    string(14) "breed_taxonomy"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(1)
    ["filter"]=>
    string(3) "raw"
  }
  [1]=>
  object(WP_Term)#16464 (10) {
    ["term_id"]=>
    int(154)
    ["name"]=>
    string(27) "German Short-Haired Pointer"
    ["slug"]=>
    string(27) "german-short-haired-pointer"
    ["term_group"]=>
    int(0)
    ["term_taxonomy_id"]=>
    int(154)
    ["taxonomy"]=>
    string(14) "breed_taxonomy"
    ["description"]=>
    string(0) ""
    ["parent"]=>
    int(0)
    ["count"]=>
    int(1)
    ["filter"]=>
    string(3) "raw"
  }
}

1 Ответ

0 голосов
/ 27 марта 2020

Я включил array_column () и in_array (), чтобы сформулировать рабочий код, как вы можете видеть ниже. Array_column () находит 'slug', затем in_array () проверяет slug в get_terms () и array_column () в foreach ().

РАБОЧИЙ КОД

<?php 
/**
 * Pet Breed
 */         
$breed_args = get_terms( array (
    'taxonomy' => 'breed_taxonomy',
    'hide_empty' => false
));

$select_breed = get_the_terms( get_the_ID(), 'breed_taxonomy' );
$select_breed_slug = array_column( $select_breed, 'slug' ); // Thanks @CBroe
?>
<div class="section group">
    <div class="col full">
        <label for="pet_breed"><strong><?php _e( 'Pet Breed', 'audar_pets' ); ?> <abbr class="required" >*</abbr></strong><br />
        <select id="pet_breed" class="taxonomy-select" name="pet_breed[]" multiple="multiple" style="width: 100%;" required="required" required >
            <option></option>
            <?php
                if ( !empty( $breed_args ) ) :

                    foreach ( $breed_args as $breed ) :

                        echo '<option value="' . $breed->slug . '" ' . ( $breed->slug == in_array( $breed->slug, $select_breed_slug ) ? 'selected="selected"' : '' ) . ' >' . $breed->name . '</option>'; // Additional Code (in_array())

                    endforeach;

                endif;
            ?>
        </select>
        </label>
    </div>
</div>
...