Как заменить ссылку в меню плагина на Wordpress?

157
30 марта 2019, 05:50

Есть сайт на wordpress с установленным плагином idcommerce в котором есть функция вывода верхнего меню.

add_action('after_setup_theme', 'idc_check_customizer');
function idc_check_customizer() {
  add_filter('wp_nav_menu_items', 'idc_update_menus', 10, 2);
}
function idc_update_menus($nav, $args) {
  global $permalink_structure;
  if (empty($permalink_structure)) {
    $prefix = '&';
  }
  else {
    $prefix = '?';
  }
  $durl = md_get_durl();
  $location = $args->theme_location;
  $option = get_option('idc_menu_'.$location);
  if ($option) {
    do_action('idc_menu_before');
    if (is_user_logged_in()) {
      $idc_menu = '<li class="createaccount buttonpadding"><a href="'.$durl.'">'.__('My Account', 'memberdeck').'</a></li>';
      $idc_menu .= '<li class="login right"><a href="'.wp_logout_url( home_url() ).'">'.__('Logout', 'memberdeck').'</a></li>';
    }
    else {
      $idc_menu = '<li class="createaccount buttonpadding"><a href="'.$durl.$prefix.'action=register">'.__('Create Account', 'memberdeck').'</a></li>';
      $idc_menu .= '<li class="login right"><a href="'.$durl.'">'.__('Login', 'memberdeck').'</a></li>';
    }
    do_action('idc_menu_after');
    $nav .= apply_filters('idc_menu', $idc_menu);
  }
  return $nav;
}

Мне нужно переопределить вывод всего лишь одной ссылки logina,

$idc_menu .= '<li class="login right"><a href="'.$durl.'">'.__('Login', 'memberdeck').'</a></li>';

заменить вместо сформированной в переменной ссылки на информационную панель $durl=/dashboard на страницу логина /login не заменяя вывод в ядре самого плагина.

В functions.php если удаляю экшн

remove_action('after_setup_theme', 'idc_check_customizer');

и дублирую точно такой же фильтр, но уже с ссылкой на /login, то в меню он выводится, но тем самым исчезает левая часть меню, которая принадлежит тому же nav. Как все сделать правильно?

Answer 1

Вам надо добавить свой фильтр wp_nav_menu_items с более высоким приоритетом (20), чтобы он выполнился позднее:

add_filter( 'wp_nav_menu_items', 'my_idc_update_menus', 20, 2 );
function my_idc_update_menus( $nav, $args ) {
    $durl     = md_get_durl();
    $location = $args->theme_location;
    $option   = get_option( 'idc_menu_' . $location );
    if ( $option ) {
        if ( ! is_user_logged_in() ) {
            $search  = '<li class="login right"><a href="' . $durl . '">' . __( 'Login', 'memberdeck' ) . '</a></li>';
            $replace = '<li class="login right"><a href="/login">' . __( 'Login', 'memberdeck' ) . '</a></li>';
            $nav     = str_replace( $search, $replace, $nav );
        }
    }
    return $nav;
}

Поместите этот код в functions.php.

READ ALSO
Ошибка при загрузке файла

Ошибка при загрузке файла

Подскажите пожалуйста, есть такой код:

184
Помогите оптимизировать&#160;запрос&#160;в&#160;MySQL

Помогите оптимизировать запрос в MySQL

Есть запрос $query=mysqli_query($connect, "SELECT * FROM lvl_base WHERE steam LIKE '$rank'"); который в последующем обрабатывается5 таких запросов на одной странице в таблици...

201
Как проверить доступ к файлу с абсолютным путём?

Как проверить доступ к файлу с абсолютным путём?

Есть каталоги с изображениями, к ним можно получить доступ по абсолютным путям, надо добавить в главный индексный файл проверки на доступ...

144
Как в переменную php записать структуру в html + echo?

Как в переменную php записать структуру в html + echo?

Есть сайт на wordpressИнтересует как в php переменную записать вывод html и содержимое echo

143