繁体   English   中英

PHP:如何替换这些字符串(有效)?

[英]PHP: how to replace these strings (efficiently)?

我正在使用array_intersect()从我的Wordpress菜单项中删除所有class es,除了列出的那些。 然后我使用str_replace重命名类。 这有效,但感觉马虎。 有更有效的方法吗?

function my_nav_menu_css_class( $classes ) {

    $classes = array_intersect( $classes, array(
        'current-menu-ancestor',
        'menu-item-has-children',
        'current-menu-item',
    ));

    $classes = str_replace( 'current-menu-ancestor', 'ancestor', $classes );
    $classes = str_replace( 'menu-item-has-children', 'children', $classes );
    $classes = str_replace( 'current-menu-item', 'item', $classes );

    return $classes;
}

add_filter( 'nav_menu_css_class', 'my_nav_menu_css_class' );

注意:上述类都是有条件的 ; 它们仅在菜单处于活动状态或下拉菜单时出现。 换句话说,尝试这个不起作用:

$rename_classes = array(
    'ancestor',
    'children',
    'item',
);
return str_replace( $classes, $rename_classes, $classes );

在这种情况下, .current-menu-item 应该.item替换,但是替换为.ancestor (因为它在数组中排在第一位)。 所以这不好。 更好的解决方案?

您应该更新CSS以使用“.current-menu-item”。

您在PHP中执行的任何操作都会使网站加载速度稍慢,并且可能会出错。

最好的代码根本就没有代码,只写出解决给定问题所需的最小数量。 减少对您的工作,减少错误并为最终用户执行更快。 这是一个全面的胜利。

我正在读这个,你做了N次(这里3)? 最终结果是您传入的$类中存在的类列表? 如果是这种情况,请使用foreach循环。 和in_array()

抱歉,如果我弄错了。 但做N次表示使用循环

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM