在Wordpress PHP循环中匹配多个属性术语

时间:2014-01-29 01:14:40

标签: php wordpress woocommerce

这似乎是一个简单的问题,但我是PHP的新手,我已经花了几个小时研究这个问题。我正在循环浏览档案中的帖子,并根据某个属性为每个帖子显示不同的徽标。这是我在functions.php中的现有函数:

function show_logo() {
global $post;
$attribute_names = array( 'pa_product-type'
 );

foreach ( $attribute_names as $attribute_name ) {
    $taxonomy = get_taxonomy( $attribute_name );
    if ( $taxonomy && ! is_wp_error( $taxonomy ) ) {
        $terms = wp_get_post_terms( $post->ID, $attribute_name );
        $terms_array = array();

        if ( ! empty( $terms ) ) {
            foreach ( $terms as $term ) {
               if ( $term->name == 'L1' ) {
                  // Show L1 Logo
               }
               elseif ( $term->name == 'M1' ) {
                  // Show M1 Logo
               }
               elseif ( $term->name == 'H1' ) {
                  // Show H1 Logo
               }
               else {
                  $full_line = '<span>'. $term->name . '</span>';
               }
               array_push( $terms_array, $full_line );
            }

            echo implode( $terms_array );
        }
    }
  }
}

如果帖子符合多个术语(例如'L1'和'M1'),我想要做的就是显示不同的徽标。我尝试了许多非常不同的东西,但我不知道我是否在正确的轨道上。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这应该相当容易,我只是不确定所涉及的所有数据的完整上下文。

假设您每个帖子只显示一个徽标,这里有一种方法:

foreach ( $terms as $term ) {之前创建三个布尔变量:

$hasL1 = false;
$hasM1 = false;
$hasH1 = false;

然后,当您的某个术语名称匹配时,而不是仅仅显示徽标设置适当的变量等于true,即$hasL1 = true;

在foreach完成后,在echo implode( $terms_array );之前或之后取决于有意义,设置一个新的if / elseif / else块来决定要显示的徽标如下:

if ($hasL1 && $hasM1 && $hasH1) { // Pick logo for all 3 }
elseif ($hasL1 && $hasM1) { // Pick logo for pair }
elseif ($hasL1 && $hasH1) { // Pick logo for pair }
elseif ($hasH1 && $hasM1) { // Pick logo for pair }
elseif ($hasL1) { // Pick logo }
elseif ($hasM1) { // Pick logo }
elseif ($hasH1) { // Pick logo }
else { // default logo }

当然,还有很多其他方法可以实现这一点。