【问题标题】:Trying to style the active items on a foreach menu with submenu in php尝试使用 php 中的子菜单在 foreach 菜单上设置活动项目的样式
【发布时间】:2016-03-18 22:06:26
【问题描述】:

我真的是 php 的新手,我正在设计一个 wordpress 主题。我正在尝试为带有子菜单项的 foreach 自定义菜单上的活动项添加一个类:

    <?php
        foreach ($taxonomies  as $taxonomy ) {

        $children = get_term_children($taxonomy->term_id, $taxonomy_name);
        $args = array(
          'hide_empty' => true,
          'order_by' => 'name',
          'parent' => $taxonomy->term_id
        );
        $children = get_terms($taxonomy_name, $args); 


        ?>
    <ul> 
        <li class="<?php echo (in_array($taxonomy->term_id, $active_terms) ? 'active' : '' )?>"><a href="<?php echo get_term_link($taxonomy->term_id, $taxonomy_name ) ?>"><?php echo $taxonomy->name ?></a></li>

        <?php if(!empty($children)) : ?>
            <ul class="<?php echo (in_array($taxonomy->term_id, $active_terms) ? 'active' : '' ) ?>" >
            <?php foreach($children as $child) : ?>
                <li class="<?php echo (in_array($child->term_id, $active_terms) ? 'active' : '' )?>"><a href="<?php echo get_term_link($child->term_id, $taxonomy_name ) ?>"><?php echo $child->name ?></a></li>
            <?php endforeach; ?>
            </ul>
        <?php endif;?>
<?php
      }?>
        </ul>
    <?php
    }  
?>

工作正常,但是当我在 &lt;ul&gt; $taxonomy 并且没有 &lt;li&gt; 必须处于活动状态时,它还会将“活动”类添加到数组中的第一个 &lt;li&gt; 子项。我做错了什么?我怎么能解决这个问题?我一直在寻找,但我对 php 和 wordpress 主题真的很陌生,感谢任何帮助!

非常感谢!

【问题讨论】:

  • 所以你的问题在
  • 里面的大
      里面没有孩子..对吧?
  • 问题出在内部
      内的
    • 中,当我在显示数组中所有项目的
        页面中时,
      • 是第一个数组上的项目它变为“活动”,当它不是因为我不在那个页面中时。我希望我解释得很好。
  • 标签: php css wordpress


    【解决方案1】:

    这段代码看起来不错。在子 foreach li 中,您有术语:

    in_array($child->term_id, $active_terms)
    

    检查 $child->term_id$active_terms 是否正确。

    【讨论】:

    • 很抱歉询问,但我该如何检查呢? :) 我认为它们很好,因为它们可以工作,并且在必要时很活跃。唯一的问题是当我在内部
        页面中时,$taxonomy 中第一个项目的
      • 处于活动状态。
    • 你确定这个第一个“li”在 html 代码中有 class="active" 吗?如果它只是看起来像活动类别,但在生成的 html 中没有“活动”类,则它与 CSS 有问题。
    • 是的,在 html 中添加了“活动”类。这不是 CSS 的问题。
    • 所以问题出在 get_term_children 函数上。它在一个数组中为您提供:术语对象和该术语的子项。看get_term_children函数代码:core.trac.wordpress.org/browser/tags/4.4.2/src/wp-includes/…
    【解决方案2】:

    试试这个:

     <?php foreach($children as $child) : ?>
        <?php if($child->term_id == $taxonomy->term_id) { continue;} ?>
        <li class="<?php echo (in_array($child->term_id, $active_terms) ? 'active' : '' )?>"><a href="<?php echo get_term_link($child->term_id, $taxonomy_name ) ?>"><?php echo $child->name ?></a></li>
     <?php endforeach; ?>
    

    【讨论】:

    • 谢谢你,Marcin,但它一直在做同样的事情,尽管你是对的,并且正如你所说的那样将所有项目放在一个数组中。我还能尝试什么?
    【解决方案3】:

    您可以检查当前url是否与链接的href属性相同。

        <?php foreach($children as $child) : ?>
            <li class="<?php echo get_term_link($child->term_id, $taxonomy_name) == 'http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]' ? 'active' : '' ?>"><a href="<?php echo get_term_link($child->term_id, $taxonomy_name ) ?>"><?php echo $child->name ?></a></li>
        <?php endforeach; ?>
    

    【讨论】:

    • 给我一个错误 :( PARSE ERROR: PARSE ERROR, EXPECTING ','' OR ';'' for this line &lt;li class="&lt;?php echo (get_term_link($child-&gt;term_id, $taxonomy_name) == 'http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]') ? 'active' : '' )?&gt;"&gt;
    • 修复了问题。当然,如果您的链接格式不同,请调整它,例如在 href 中只有 $_SERVER[REQUEST_URI]
    • 谢谢。现在,当我在
        上时它没有添加“活动”,但当我当前在
      • 中时它也没有添加,这实际上是我需要的。我猜这可能是因为
          也有
        • 活动类别相关联。可能有一种方法可以让我只将第一个活动类别检索到
    • 您必须检查 get_term_link($child->term_id, $taxonomy_name) 输出的链接格式,如果链接已满,如 stackoverflow.com/questions/36084404 您必须与 http://$ 进行比较_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI] ,而如果它像 /questions/36084404/ 你必须与 $_SERVER[REQUEST_URI] 进行比较
    • 谢谢克劳迪奥,我一定是在 wordpress 实现中遗漏了一些东西,或者......不知道:D
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签