Wordpress: если (URL-адрес example.com/sitemap) сделать это ... - PullRequest
3 голосов
/ 26 января 2010

Ранее я создавал свою страницу карты сайта с example.com?action=sitemap

Это позволило мне легко проверить на моей странице индекса запрос карты сайта с ...

$_REQUEST['action']

Однако вместо этого я хотел бы создать ссылку на карту сайта с example.com/sitemap

И хотелось бы узнать, как я могу разобрать запрос на появление "/sitemap"

Ответы [ 5 ]

1 голос
/ 27 января 2010

Я действительно не знаю Wordpress, поэтому мой ответ будет независимым от фреймворка / приложения, но вы можете использовать mod_rewrite, чтобы легко добиться этого поведения (хотя это означает, что либо оно уже включено на вашем хосте, либо у вас есть доступ к config-edit)).Просто поместите это в файл .htaccess в корневом каталоге:

RewriteEngine On
RewriteRule ^/sitemap$ /index.php?action=sitemap [QSA,L]

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

То, что он делает, в основном говорит apache обрабатывать все запросы на /sitemap как запросы на /index.php?action=sitemap.

1 голос
/ 26 января 2010
if (strpos($_SERVER['PHP_SELF'],'sitemap')===false) {
//sitemap not found in server string
} else { 
//sitemap found in server string
}

должен сделать трюк

1 голос
/ 27 января 2010

Вы можете создать новое правило переписывания в Wordpress примерно так:

function sitemap_rewrite($wp_rewrite) {
    $rules = array('sitemap' => 'index.php?action=sitemap');
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
    return $wp_rewrite;
}
add_action('generate_rewrite_rules', 'sitemap_rewrite');

function flush_rewrite_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
add_filter('init', 'flush_rewrite_rules');

Вам нужно будет запускать эти функции только один раз (например, когда ваша тема установлена), потому что правила перезаписи хранятся в базе данных.

Однако вы, вероятно, обнаружите, что, используя этот метод, вы не можете получить доступ к переменной action, используя $_REQUEST['action']. Чтобы получить доступ к вашей переменной, вам нужно добавить ее в массив Wordpress 'query_vars, примерно так:

function add_action_query_var($vars) {
    array_push($vars, 'action');
    return $vars;
}
add_filter('query_vars', 'add_action_query_var');

Затем вы можете получить переменную действия, используя get_query_var('action').

0 голосов
/ 03 февраля 2010

Почему бы и нет: $ _ SERVER или $ _ REQUEST

0 голосов
/ 26 января 2010

Вы можете попробовать проверить содержимое переменной PHPs $_SERVER["QUERY_STRING"]. Он должен иметь вашу деталь /sitemap с возможностью иметь некоторые дополнительные параметры.

...