2016-01-20 1 views
0

Итак, я работаю над веб-сайтом, и добавляю новый пункт меню на странице профиля BuddyPress. Меню добавлено правильно на странице bp-custom.php. Но когда я нажимаю на Меню, я не могу перенаправить его на страницу, которую я хочу. Код что-то вроде:Как перенаправить пункт меню BuddyPress на другую страницу на сайте Wordpress?

function add_gift_card() { 

global $bp; 

bp_core_new_nav_item(array(
    'name'     => 'Gift Cards', 
    'slug'     => 'shop', 
// 'parent_url'   => get_option('siteurl').'/shop', 
// 'parent_slug'   => $bp->profile->slug, 
    'screen_function'  => 'gift_card_screen',   
    'position'    => 90, 
    'default_subnav_slug' => 'shop' 
)); 
} 

add_action('bp_setup_nav', 'add_gift_card', 100); 

function gift_card_screen() { 
add_action('bp_template_content', 'gift_card_screen_content'); 
bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins')); 
} 

function gift_card_screen_content() { 
echo 'Gift Cards<br/>'; 
} 

Как я могу перенаправить его на новую страницу на веб-сайте, независимо от корневого домена пользователя?

ответ

0

мне пришлось удалить шаблон функции, чтобы перенаправить его правильно. И, как было предложено shanebp, функция bp_core_redirect оказалась удобной. Код теперь выглядит так:

function add_gift_card() { 

global $bp; 

bp_core_new_nav_item(array(
    'name'     => 'Gift Cards', 
    'slug'     => 'shop', 
    'screen_function'  => 'gift_card_screen',   
    'position'    => 90, 
    'default_subnav_slug' => 'shop' 
)); 
} 

add_action('bp_setup_nav', 'add_gift_card', 100); 

function gift_card_screen() { 

bp_core_redirect(get_option('siteurl').'/shop/'); 

} 
0

Что вам нужно сделать, это выпустить HTTP-заголовок с ключом и значением Location. У WordPress есть функция, которая сделает это за вас.

Функция, которую вы ищете, является wp_redirect(). Канонический пример:

<?php 
    wp_redirect($location, $status); 
    exit; 
?> 

Это не черная магия, и в основном это делает:

header("HTTP/1.1 301 Moved Permanently"); 
header("Location: http://www.anyhost.com"); 

Но лучше использовать WordPress, связанные функции в WordPress среды, потому что разработчики хотели бы ответить на эти виды действий и фильтровать различные связанные данные.

1

Изменить это:

// 'parent_url'   => get_option('siteurl').'/shop', 
// 'parent_slug'   => $bp->profile->slug, 

Для этого:

'parent_url'   => $bp->displayed_user->domain, 
'parent_slug'   => $bp->profile->slug, 

Тогда попробуйте это:

function gift_card_screen_content() { 
    bp_core_redirect(site_url('/shop/')); 
} 
+0

Спасибо за ваш ответ. Я удалил функцию шаблона и использовал bp_core_redirect. Теперь он работает по своему желанию. – Neels

Смежные вопросы