Как создать новое правило перезаписи для страницы профиля прессы собеседника - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть существующая ссылка на профиль пользователя в прессе, например: https://example.com/members/joseph-bada

Мне нужно сделать https://example.com/members/joseph-b его точную копию.

упрощенная версия моего кода:

add_filter('wp', 'custom_rewrite_rule');
function custom_rewrite_rule() {
    global $wp_query, $wp_rewrite;
    $slug = $wp_query->query_vars['name'];
    if($slug==='joseph-bada') {
        add_rewrite_rule('^members/joseph-b/?', 'members/joseph-bada', 'top');
        $wp_rewrite->flush_rules();
    }
}

но если я просматриваю https://example.com/members/joseph-b - я получаю ошибку 404

UPDATE: даже после добавления этого в functions.php

add_action('init', 'custom_test');
function custom_test() {
    global $wp_rewrite;
    add_rewrite_rule('^members/joseph-b', 'members/joseph-bada', 'top');
    $wp_rewrite->flush_rules();
}

https://example.com/members/joseph-b по-прежнему 404

Может кто-нибудь указать, что мне не хватает?

ОБНОВЛЕНИЕ: я узнал, что https://example.com/index.php?bbp_user=joseph-bada&edit=1 приводит к https://example.com/members/joseph-bada

так что теперь я попробовал это:

add_action('init', 'custom_test');
function custom_test() {
    global $wp_rewrite;
    add_rewrite_rule('^members/joseph-b', 'https://example.com/index.php?bbp_user=joseph-bada&edit=1', 'top');
    $wp_rewrite->flush_rules();
}

все еще безрезультатно 404, хотя ..

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

я отказался от использования add_rewrite_rule wordpress функциональности .. вместо этого я изучил плагин buddypress и как он работает .. я обнаружил следующие фильтры:

function custom_bp_domain_filter($domain, $user_id) {
    $change_slug = is_joseph_bada_user_id($user_id);
    if ($change_slug) {
        $domain = trailingslashit(bp_get_root_domain() . '/' . 'members/joseph-b');
    }
    return $domain;
}

add_filter('bp_core_get_user_domain', 'custom_bp_domain_filter', 10, 2);

эта часть выше является фильтром, в котором я собираюсь проверить, относится ли отображаемый идентификатор пользователя к members / joseph-bada. если это так, измените его на members / joseph-b

function custom_bp_after_slug_filter($after_member_slug) {

    if ($after_member_slug==='joseph-b') {
        $after_member_slug = 'joseph-bada';
    }
    return $after_member_slug;
}

add_filter('bp_core_set_uri_globals_member_slug', 'custom_bp_after_slug_filter');

эта часть выше определяет, является ли URI теперь members / joseph-b .. у нас нет пользователя с этим, вместо этого это 'joseph-bada'

возвращаемое значение здесь - это пользователь, который будет отображаться, поэтому мы должны вернуть 'joseph-bada', если значением параметра является 'joseph-b'

когда члены / joseph-b просматриваются .. будет отображаться профиль участников / joseph-bada

0 голосов
/ 01 апреля 2019

Отказ от ответственности: я не разработчик WP, но здесь.

Похоже, что $ query часть add_rewrite_rule должна быть явной в его настройке (как показано в примере ниже сindex.php string).

function custom_rewrite_rule() {
    add_rewrite_rule('^nutrition/?([^/]*)/?','index.php?page_id=12&food=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);

Я также заметил, что вы делаете add_filter вместо add_action.

...