php 在字符串 b 的多个位置插入字符串 (a) 并连接字符串

php insert string(a) at multiple positions in string b and concatenate the string

我一直在研究解决方案,但我的逻辑还不完整。

我想在多个位置(数组中的位置)将字符串 A 插入到字符串 B 中。

positions 变量数组是一个 strpos() return value[].

字符串 B 必须与自身连接,以便它包含原始字符串,但在多个位置插入新字符串 A。

到目前为止的逻辑如下:

    function add_submenu_back_item( $items, $args ){
        if( 'top-menu' == $args->theme_location ){
                $menu_item_back = '<a class="go-back"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left-short" viewBox="0 0 16 16">
                <path fill-rule="evenodd" d="M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5z"/>
              </svg></a>';
                $subMenuPos = strpos($items, 'sub-menu');
                $new_items = '';
                $arrayPos = strpos_all( $items, 'sub-menu' );
                $offset = 10;
                $values;
                for ($i = 0; $i <= count($arrayPos) - 1; $i++) {
                        // $new_items = substr_replace($items, $menu_item_back, $arrayPos[$i] + $offset, 0);
                        echo substr_replace($items, $menu_item_back, $arrayPos[$i] + $offset, 0);
                }
                
        }
        return ''; // testing mode, should be $new_items but doesnt seem to output the inserted value
} 
add_filter( 'wp_nav_menu_items', 'add_submenu_back_item', 10, 2 );

我认为逻辑应该表达的是:

我正在尝试将 $menu_item_back 插入 $menu_items。 $items 是表示 HTML 菜单导航的字符串。

目前正在 return 重复列表 $menu_items.

我决定使用 JavaScript 作为解决方案。根据需要更容易访问 DOM 元素,并且是解决此解决方案的更好方法,因为它是前端开发而不是服务器端开发。

代码:

// create go-back element button
  var goBackEl = document.createElement('li');
  goBackEl.innerHTML = '<a class="go-back" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="#FFFFFF" class="bi bi-arrow-left-short" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M12 8a.5.5 0 0 1-.5.5H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5a.5.5 0 0 1 .5.5z"/></svg></a>';

// add go-back button to sub-menu as the first child
  submenuEl.prepend( goBackEl );