如何在WordPress中从循环中排除类别ID

时间:2021-01-14 作者:Johan Schack Petersen

我试图从我的循环中排除2个(可能更多)ID,它显示所有有帖子的类别。我当前试图排除的类别ID是1和19。我对PHP非常陌生,但之前能够通过在论坛上搜索来解决我的问题,但迄今为止没有任何效果。

// Function to create shortcode of all categories
function my_categories_shortcode() { 
 
// extracting categories
$args=array(
  \'orderby\' => \'name\',
  \'order\' => \'ASC\',
)

?><div class="categorylist">
 <?php foreach (get_categories( $args ) as $cat ) : ?>

<a class="categorylink" href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
<h3 class="categoryname"><?php echo $cat->cat_name; ?></h3></a>

 <?php endforeach; ?>
</div>
 <?php
} 
// register shortcode
add_shortcode(\'showcategories\', \'my_categories_shortcode\');
我应该添加什么来排除类别?

提前感谢!

EDIT

谢谢,我通过添加Tom Nowell提到的continue函数解决了这个问题。我还向函数中添加了提示,这是一个字符串:

// Function to create shortcode of all categories
function my_categories_shortcode() : string { 
 
// extracting categories
$args=array(
  \'orderby\' => \'name\',
  \'order\' => \'ASC\',
)

?><div class="categorylist">
 <?php foreach (get_categories( $args ) as $cat ) : 
    if ($cat->term_id == 19) {
        continue;
    }
 ?>

<a class="categorylink" href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
<h3 class="categoryname"><?php echo $cat->cat_name; ?></h3></a>

 <?php endforeach; ?>
</div>
 <?php
} 
// register shortcode
add_shortcode(\'showcategories\', \'my_categories_shortcode\');

1 个回复
SO网友:Tom J Nowell

解决方案已在您的代码中:

 <?php foreach (get_categories( $args ) as $cat ) : ?>

<a class="categorylink" href="<?php echo get_category_link($cat->term_id); ?>"><img src="<?php echo z_taxonomy_image_url($cat->term_id); ?>" />
更具体地说:

 <?php foreach (get_categories( $args ) as $cat ) : ?>

...get_category_link($cat->term_id)...
那个term_id 是类别的ID,因此只需测试它是否与您不需要的ID之一匹配,以及continue; 跳到下一个。

然而,您的代码中有一个不相关但极其严重的错误。短代码不直接回显/输出。它们需要以字符串形式返回输出。这个短代码会破坏很多东西,并且会出现在错误的地方。

请记住:

function brokenshortcode() {
    ?><p>I am an awful shortcode that breaks lots of things</p><?php
}
add_shortcode( \'broken\', \'brokenshortcode\' );
function niceshortcode() : string {
    return \'<p>I am a good well behaved shortcode</p>\';
}
add_shortcode( \'nice\', \'niceshortcode\' );
您可以通过以下类型提示函数来强制执行此操作:

function my_categories_shortcode() : string {
现在,如果您犯了这个错误,该函数将导致PHP致命错误

相关推荐

将JS值设置为PHP变量,以使用PHP If Else语句更改div背景颜色

我有下面的div,我使用PHP if else根据$tteg值更改div的背景颜色,该值等于JS值{{ReviewOverall}},我不知道我是否正确地等于它们,但它似乎有效,我面临的问题是背景颜色总是红色,我不确定下面的代码是否正确,请帮助。我想做的是,如果{ReviewOverall}}值低于7,div背景色为红色,否则为绿色,我想提到{ReviewOverall}}值从0开始到10,例如,当其值为5时,它没有小数,但如果其值为3.1或其他值,则它在点后有一个小数。我正在Wordpress插件编辑器