foreach, if, else php 问题
Issue with foreach, if, else php
我一直在尝试将 else 添加到我的 foreach 循环中,它显示类别和子类别。但是如果没有可用的类别,那么我希望它显示一个文本,告诉它没有类别或类别中的产品。
现在即使显示了一些类别,它仍然显示类别中没有产品的文本。
<?php
$taxonomy = 'product_cat';
$orderby = 'menu_order';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = '';
$empty = 1;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$all_categories = get_categories( $args );
echo '<ul>';
echo '<div class="category"><h1>CATEGORIES</h1></div>';
foreach ($all_categories as $cat) {
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
echo '<li class="parentcategory">';
echo '<a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
echo '</li>';
$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo '<li class="subcategory">';
echo '<a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>' ;
echo '</li>';
}
}
}
else {
echo '<li>';
echo '<p>';
echo 'Currently there is no categories made';
echo ' or any products in the categories';
echo '</p>';
echo '</li>';
}
}
echo '</ul>';
?>
您的 if 语句在 foreach 循环中,因此如果有类别,它会写入该类别的名称。当没有类别时(或者 category_parrent 不等于 0 [$cat->category_parent ==0] 那么)在最后一个循环中它进入 else 语句并告诉你有类别。只需在 foreach 循环之前做一个 if 语句
感谢@Doğuş,我想到了这个解决方案。我在 foreach 循环之前添加了一个 if( !empty($all_categories) ){
,它似乎按预期工作。它在有类别时显示类别,在没有类别时显示文本。
如果有人有更好的解决方案请post您的回答。
<?php
$taxonomy = 'product_cat';
$orderby = 'menu_order';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = '';
$empty = 1;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$all_categories = get_categories( $args );
echo '<ul>';
echo '<div class="categories"><h1>CATEGORIES</h1></div>';
if( !empty($all_categories) ){
foreach ($all_categories as $cat) {
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
echo '<li class="parentcategory">';
echo '<a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
echo '</li>';
$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo '<li class="subcategory">';
echo '<a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>' ;
echo '</li>';
}
}
}
} }
else {
echo '<li>';
echo '<p>';
echo 'Currently there is no categories made';
echo ' or any products in the categories';
echo '</p>';
echo '</li>';
}
echo '</ul>';
?>
我一直在尝试将 else 添加到我的 foreach 循环中,它显示类别和子类别。但是如果没有可用的类别,那么我希望它显示一个文本,告诉它没有类别或类别中的产品。
现在即使显示了一些类别,它仍然显示类别中没有产品的文本。
<?php
$taxonomy = 'product_cat';
$orderby = 'menu_order';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = '';
$empty = 1;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$all_categories = get_categories( $args );
echo '<ul>';
echo '<div class="category"><h1>CATEGORIES</h1></div>';
foreach ($all_categories as $cat) {
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
echo '<li class="parentcategory">';
echo '<a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
echo '</li>';
$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo '<li class="subcategory">';
echo '<a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>' ;
echo '</li>';
}
}
}
else {
echo '<li>';
echo '<p>';
echo 'Currently there is no categories made';
echo ' or any products in the categories';
echo '</p>';
echo '</li>';
}
}
echo '</ul>';
?>
您的 if 语句在 foreach 循环中,因此如果有类别,它会写入该类别的名称。当没有类别时(或者 category_parrent 不等于 0 [$cat->category_parent ==0] 那么)在最后一个循环中它进入 else 语句并告诉你有类别。只需在 foreach 循环之前做一个 if 语句
感谢@Doğuş,我想到了这个解决方案。我在 foreach 循环之前添加了一个 if( !empty($all_categories) ){
,它似乎按预期工作。它在有类别时显示类别,在没有类别时显示文本。
如果有人有更好的解决方案请post您的回答。
<?php
$taxonomy = 'product_cat';
$orderby = 'menu_order';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 1; // 1 for yes, 0 for no
$title = '';
$empty = 1;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$all_categories = get_categories( $args );
echo '<ul>';
echo '<div class="categories"><h1>CATEGORIES</h1></div>';
if( !empty($all_categories) ){
foreach ($all_categories as $cat) {
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
echo '<li class="parentcategory">';
echo '<a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';
echo '</li>';
$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo '<li class="subcategory">';
echo '<a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>' ;
echo '</li>';
}
}
}
} }
else {
echo '<li>';
echo '<p>';
echo 'Currently there is no categories made';
echo ' or any products in the categories';
echo '</p>';
echo '</li>';
}
echo '</ul>';
?>