2016-02-09 16 views
0

вечер все,Wordpress пользовательских mod_rewrite - Не работает

Я чувствую, как я стучал головой о кирпичную стену с этим на некоторое время теперь я обращаюсь к вам за помощью.

У меня есть веб-сайт с Wordpress, на котором я создал некоторые настраиваемые шаблоны страниц, в которых используются параметры URL, чтобы заставить их работать.

В настоящее время у меня есть страницы, работающие отлично с URLs: mydomain.com/clubs/betting/?c=arsenal

То, что я пытаюсь сделать, это сделать это выглядеть красивее, так что выглядит как: mydomain.com/клубы/ставки/арсенал/

Я думал, что это будет 10-минутная работа, но через полтора часа я все еще не буду дальше. Мой mod_rewrite выглядит так:

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^clubs/betting/([A-Za-z0-9-]+)/?$ clubs/betting/?c=$1 [NC,L] 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 
# END WordPress 

Где я иду не так ??

+0

WordPress выполняет тонну перезаписи в реальном PHP-коде. Вы не получите желаемого результата, изменив файл htaccess. –

+0

Есть ли способ получить желаемый результат? Возможно, через PHP? –

ответ

0

вы можете использовать api rewrite для вызова вашего php-файла, а не для создания шаблона страницы. Это было бы самым чистым способом.

add_action('init', 'anew_rewrite_rule'); 
function anew_rewrite_rule(){ 
    //note matching betting/something 
    add_rewrite_rule('^betting\\/[a-z]','index.php?is_betting_page=1','top'); 
} 

add_action('query_vars','controller_set_query_var'); 
function controller_set_query_var($vars) { 
    array_push($vars, 'is_betting_page'); // ref url redirected to in add rewrite rule 

    return $vars; 
} 


//we'll call it a template but point to your controller 
add_filter('template_include', 'include_controller'); 
function include_controller($template){ 


    // see above 2 functions.. 
    if(get_query_var('is_betting_page')){ 
     //path to your template file -- update this! 
     $new_template = get_stylesheet_directory().'/yourtemplatefile.php'; 
     if(file_exists($new_template)){ 
      $template = $new_template; 
     } 
    }  

    return $template;  

} 

Примечание: вам необходимо зайти в настройки после вставки этого кода и сохранить пермалинки, это промывает правила перезаписи.

Таким образом WordPress не будет пытаться разрешить URL, используя свой собственный механизм перезаписи ...

Вы можете получить Ури с помощью переменных $ _SERVER.

Конечно, если вы достаточно ранены в своем проекте, вы можете создать персонализированный тип сообщения, называемый ставкой, и установить его как базовый url, тогда арсенал будет настраиваемым типом сообщения и т. Д. Затем вы можете использовать get title для запуска все что пожелаете.

+0

Спасибо, я дам это испытание позже, когда я вернусь домой! - Думаю, я понимаю большую часть этого ... Единственный бит, который выглядит запутанным, - это раздел «is_betting_page». Что это такое? –

+0

простое объяснение, что его переменная запроса is_betting_page = 1 будет передана во внутреннем uri (видимый uri останется прежним, его не перенаправлять с входного uri, если он разрешен), а следующая функция добавляет аргумент для разрешения запроса var мы добавили. Wp перенаправляет все через index.php, а запросы vars определяют действие post/action. Третья ссылка - это просто повторить запрос var снова (функция ea отдельно) и обслуживать требуемый файл php. – David

0

Спасибо Дэвиду за то, что он указал мне в правильном направлении ... Мне наконец-то удалось это сделать, используя API-интерфейс Wordpress Rewrite.

В конце концов я использовал следующий код в моем файле functions.php:

function custom_rewrite_rule(){ 
    //note matching betting/something 
    add_rewrite_rule('^clubs/betting/([^/]+)/?','index.php?page_id=160&club_name=$matches[1]','top'); 
    add_rewrite_tag('%club_name%','([^/]*)'); 
} 

add_action('init', 'custom_rewrite_rule', 10, 0); 

Это позволило мне справиться с переписыванием URL-адрес, и до сих пор проходит в параметре URL-адреса на мою страницу, так что я мог бы показать правильный содержание на нем.

Я был тогда в состоянии получить доступ к параметру в шаблоне страницы с помощью:

$wp_query->query_vars['club_name']; 

Спасибо за указание мне в правильном направлении ... Думал я бы развесить код я закончил с использованием в случае, если кто другой пытается это сделать.

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