簡體   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