WordPress:尝试使用“get_categories()”获取特定的类别网址

时间:2017-08-11 04:10:39

标签: php html css wordpress

好的,问题相对简单,我不知道自己做错了什么。

问题:

目前,下面的代码没有做任何事情只是刷新页面(转到博客页面)

            <div class="category-box">
        <?php 
            $categories = get_categories();
             $category_link = '';
            foreach ($categories as $cat) {
                if($cat->cat_name == 'industry news') {
                 $category_link = get_category_link($cat->cat_ID);
                }
                break;               
            }
        ?>

            <a href="<?php echo $category_link; ?>"><img class="category-icon" src="<?php bloginfo('template_url');?>/img/desktop/images/category-icon-1.jpg">
            <h3> INDUSTRY NEWS</h3></a>
        </div>

想法好吗?

2 个答案:

答案 0 :(得分:1)

使用此代码:

使用$cat->name代替$cat->cat_name,并将$cat->cat_ID更改为$cat->term_id

<div class="category-box">
<?php 
    $categories = get_categories();
    $category_link = '';
    foreach ($categories as $cat) {
        if($cat->name == 'industry news') {
            $category_link = get_category_link($cat->term_id);
        }
        break;               
    }
?>

    <a href="<?php echo $category_link; ?>"><img class="category-icon" src="<?php bloginfo('template_url');?>/img/desktop/images/category-icon-1.jpg">
    <h3> INDUSTRY NEWS</h3></a>
</div>

更多信息: https://developer.wordpress.org/reference/functions/get_categories/

答案 1 :(得分:0)

您的foreach包含break,保证可以执行,因此您只需要循环1次迭代。

标记也在循环之外,这意味着它只显示一次而不是每个类别。

我并不完全清楚你想要实现的目标,所以我将提供两个我认为会指向正确方向的例子。

1)每个类别的标记

<?php $categories = get_categories();

if ( $categories ) {
    foreach ( $categories as $category ) { ?>

        <div class="category-box">
            <a href="<?php echo esc_url( get_category_link( $category ) ); ?>>
                <img class="category-icon" src="<?php bloginfo('template_url');?>/img/desktop/images/category-icon-1.jpg">
            </a>
            <h3><?php echo $category->name; ?></h3>
        </div>

    <?php }
} 

如果您采用这种方法,您仍然需要弄清楚如何动态更新图片。

2)获取一系列链接

我们不是获得单个链接,而是获得包含所有类别链接的数组。

<?php $categories = get_categories();

$category_links = array_map( function( $category ) {
    return get_category_link( $category );
}, $categories );

echo $category_links[0]; // [1], [2], etc...

虽然这有效并且可以让您访问每个链接,但我认为它不是理想的解决方案。相反,你应该利用返回的数据并动态显示它们而不是硬编码。

如果您决定使用选项2,也许添加一些密钥会有所帮助。

示例:

<?php $categories = get_categories();

$category_links = array();

foreach ( $categories as $category ) {
    $category_links[ $category->slug ] = get_category_link( $category );
}

用法:

<?php echo esc_url( $category_links['industry-news'] ); ?>

请记住,上面的示例使用slugs而不是数组键的名称。