分类术语未填充选择标记选项

时间:2016-02-19 作者:rushdi

我正在检索分类术语。代码正在运行
Foreach为select标记创建三个选项。有三个术语。但是,当我想在选择一个选项后为每个选项回显“selected”时。它返回奇数结果。问题是什么?这是代码。

$terms = get_terms( \'department\' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
        echo \'<select class="widefat" name="departments">\';
            foreach ( $terms as $term ) {
                echo \'<option value="\'. $term->name .\'"\'.($_POST[\'departments\'] == $term->name) ? \' selected="selected" \' : \'\'.\'>\'. $term->name . \'</option>\';
            }
        echo \'</select>\';

    }
返回以下内容:

<select class="widefat" name="departments"> selected="selected"  selected="selected"  selected="selected" </select>
自定义职位名称:employeeTaxonomy名称:Department有三个可用术语:Web Designer、Web Developer、Graphics Designer

如果使用此代码,我将获得分类术语。

$terms = get_terms( \'department\' );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
  echo \'<select class="widefat" name="departments">\';
    foreach ( $terms as $term ) {
      $value = $term->name;
         for ($i=0; $i < count($term); $i++) { 
            echo \'<option value="\'
               . $value .\'"\'.\'>\'
               . $value . \'</option>\';
    }

}
echo \'</select>\';
返回值:

<select class="widefat" name="departments">
<option value="Graphic Designer">Graphic Designer</option>
<option value="Web Designer">Web Designer</option>
<option value="Web Devloper">Web Devloper</option>
</select>
但是如果我想将selected实现到selected选项中,那么它正在崩溃。

我想补充一点,如果您选择了图形设计师,那么该选项将如下所示

<option value="Graphic Designer" selected="selected">Graphic Designer</option>
但这并没有发生。

2 个回复
SO网友:karlo jay bueno

我认为使用get_terms() 是要使用的get_categories() 相反

下面是我对您的代码所做的一个片段:

    $args = [\'taxonomy\'  => \'department\'];
    $terms = get_categories($args);
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
    echo \'<select class="widefat" name="departments">\';
        foreach ( $terms as $term ) {
            echo \'<option value="\'. $term->name .\'"\'.($_POST[\'departments\'] == $term->name) ? \' selected="selected" \' : \'\'.\'>\'. $term->name . \'</option>\';
        }
    echo \'</select>\';
}
希望它能帮助你。

SO网友:Tom J Nowell

我认为这与字符串串联中使用的三元运算符有更多关系。

我将通过依赖一个经典的if语句来消除这个问题,但WordPress提供了一个有用的函数selected, 给我们:

$terms = get_terms( \'department\' );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
    echo \'<select class="widefat" name="departments">\';
    foreach ( $terms as $term ) {
        echo \'<option value="\'. $term->name .\'"\'.selected($_POST[\'departments\'], $term->name, false ).\'>\'. $term->name . \'</option>\';
    }
    echo \'</select>\';

}
然而,这里发生了一些更令人震惊的事情,与你的问题无关。如果我们有一个名为"><script>alert(\'hello world\');</script><option>? 由于一个未经转移的变量输出,我们有一个注入攻击的途径。因此,让我们使用一些转义来更新代码,以确保其安全:

$terms = get_terms( \'department\' );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
    echo \'<select class="widefat" name="departments">\';
    foreach ( $terms as $term ) {
        echo \'<option value="\'. esc_attr( $term->name ) .\'"\'.selected($_POST[\'departments\'], $term->name, false).\'>\'. esc_html( $term->name ) . \'</option>\';
    }
    echo \'</select>\';

}
现在,可能意外插入的任何HTML或实体都已变得安全,代码也安全了。我们还可以简化代码,使其更易于阅读:

$terms = get_terms( \'department\' );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
    echo \'<select class="widefat" name="departments">\';
    foreach ( $terms as $term ) {
        ?>
        <option value="<?php echo esc_attr( $term->name ); ?>"
            <?php selected($_POST[\'departments\'], $term->name);?>>
            <?php echo esc_html( $term->name );?>
        </option>
        <?php
    }
    echo \'</select>\';

}

相关推荐

ACF Taxonomy in Loop

你好吗我的问题是,我在头版上显示了一些卡片,例如名称和描述,这些信息来自我的分类法event,因为我用ACF创建了一些字段,我想在卡片中打印它们,但我不知道怎么做。下面是我如何打印卡片的代码 <?php if(is_front_page()): $terms = get_terms( [ \'taxonomy\' => \'evento\', \'hide_empty\' =>