这似乎是一个简单的问题,但我是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'),我想要做的就是显示不同的徽标。我尝试了许多非常不同的东西,但我不知道我是否在正确的轨道上。任何帮助将不胜感激。
答案 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 }
当然,还有很多其他方法可以实现这一点。