【问题标题】:Wordpress - Need to combine/search array [0]->slug, [1]->slug, etc within foreach()Wordpress - 需要在 foreach() 中组合/搜索数组 [0]->slug、[1]->slug 等
【发布时间】:2020-03-26 06:04:08
【问题描述】:

在这个特定的代码中,我的管理后端中有一个<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>

保存

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"
  }
}

【问题讨论】:

  • 好吧,你必须遍历$select_breed,并将你的品种的蛞蝓与每个选定的蛞蝓分别进行比较……如果找到匹配项,则设置一个标志,然后根据该标志决定是否输出@987654333 @, 或不。或者你让这更容易一些 - 并使用 array_column$select_breed 中提取所有 slug 值。一旦你有了一个只包含选定的 slug 作为字符串的“平面”数组,你就可以简单地使用 in_array 来执行检查,而无需自己编写循环或类似的东西。
  • 谢谢我正在考虑使用 count() 和 while() 选项,但我不知道如何将 while 添加到 foreach 循环中。您将如何提取 slug 值?我会研究array_column。如果你能提供一个基本的例子,我会试一试!感谢您的评论。
  • $slugs = array_column($select_breed, 'slug'); 应该可以解决问题。 (使用 var_dump 验证,$slugs 现在应该只包含 slug 值作为项目。)
  • 谢谢。这里已经很晚了。我会尽快实施并相应回复。
  • 很高兴它成功了。不过,您能否将其作为实际答案?保持本网站的问答格式;-) stackoverflow.com/help/self-answer

标签: php arrays wordpress metadata custom-taxonomy


【解决方案1】:

我已合并 array_column() 和 in_array() 来制定工作代码,如下所示。 array_column() 找到“slug”,然后 in_array() 检查 get_terms() 中的 slug 和 foreach() 中的 array_column()。

工作代码

<?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>

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 2011-04-21
  • 2014-09-20
  • 2019-08-07
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 2023-01-20
  • 2014-05-30
相关资源
最近更新 更多