ПОДТВЕРЖДЕНИЕ, ЧТОБЫ ИЗМЕНИТЬ, ЧТО Я РЕШЕН ЭТО
Скажем, у меня есть блог Wordpress: www.animals.com
. У меня есть определенный PHP файл в моем каталоге тем: www.animals.com/wp-content/themes/mytheme/db.php
. Кроме того, у меня есть настраиваемый шаблон для этой страницы, поэтому я создаю новую страницу на панели администрирования Wordpress, чтобы показать db.php
: www.animals.com/database
.
Итак, если я хочу что-то прочитать о львах, я просто перехожу к: www.animals.com/database/?animal=lion
(потому что так я решил написать PHP, вставив в запрос значение из $_GET ['animal'], используя PDO и др.).
Теперь я хотел бы получить доступ к www.animals.com/database/?animal=lion
как www.animals.com/lion
.
Должен ли я использовать .htaccess или Wordpress Rewrite? Где я должен разместить свой .htaccess в корневой папке Wordpress (с wp-config.php и этими файлами) или в моем каталоге тем?
Один из корня имеет RewriteBase /
и материал из Wordpress по умолчанию. Что я должен писать, чтобы добиться того, чего хочу? Должен ли я помещать его перед или после существующего кода?
EDIT: это мой public_html.htaccess, и это то, что я хочу действительно:
У меня есть веб-сайт: www.domain.com
, и когда вы вводите этот http://www.domain.com/dios/?dios=agni
, он показывает вам информацию о бога Агни. Я хотел бы ввести www.domain.com/dioses/agni
для доступа к информации о бога Агни. Файл PHP находится в www.domain.com/wp-content/themes/smitespain/dios.php
Он не работает x_x
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dioses/(\w*)$ dios/?dios=$1 [NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
EDIT2: я использую multisite (проверьте EDIT4), и снова, /database//dios/and/dioses/are not фактические папки, которые я создал, это имя для страницы, которую я создал в Wordpress. Дело в том, что теперь оно показывает имя бога в заголовке вкладки: S означает, что установлена переменная $_GET ['dios'], но она не загружает файл (dios.php) =/
EDIT3. Мне нужно напрямую обратиться к domain.com/dios/?dios=agni, потому что это URL-адрес, который позволит файлу PHP (dios.php) загрузить get_header() из wordpress, поэтому я не могу получить доступ к файлу напрямую
EDIT4: я решил удалить многопозиционную вещь
EDIT5: это страницы Wordpress, которые у меня есть:
domain.com/dioses/
для (www.domain.com/wp-content/themes/smitespain/dioses.php)
domain.com/dios/?dios=thor
для (www.domain.com/wp-content/themes/smitespain/dios.php)
EDIT6: я читал что-то в wordpress codex..и понял, что если я хочу пойти в domain.com/dioses
, я могу получить к нему доступ, перейдя в domain.com/index.php?pagename=dioses
или domain.com/?pagename=dioses
Итак, я добавил это между RewriteBase /
и следующим правилом: RewriteRule example/test ?pagename=dioses
и domain.com/example/test
перенаправляет меня на domain.com/dioses
, но также изменяет URL-адрес в адресной строке:(
Дело в том, что если я попробую: RewriteRule example/test ?pagename=dios&dios=thor
он отправит меня на страницу 'dios' без '? Dios = thor'
EDIT7: я начал использовать wordpress rewrite, я добавил это в свою тему functions.php:
function my_rewrite_rules() {
add_rewrite_rule(
'blah',
'index.php?pagename=dios&dios=agni',
'top'
);
}
add_action( 'init', 'my_rewrite_rules' );
и снова.. он загружает страницу dios, без? dios = agni
EDIT8: и, наконец, мне удалось заставить его работать =)
первое, что мне нужно знать, новый ?dios=XXXX
больше не будет доступен для $_GET['dios']
, вам нужно позвонить $wp_query->query_vars['dios']
, поэтому я добавил это в свою тему functions.php
function add_query_vars($new_var) {
$new_var[] = "dios";
return $new_var;
}
add_filter('query_vars', 'add_query_vars');
function add_rewrite_rules($rules) {
$new_rules = array('([^/]+)' => 'index.php?pagename=dios&dios=$matches[1]');
$rules = $new_rules + $rules;
return $rules;
}
add_filter('rewrite_rules_array', 'add_rewrite_rules');
i убедитесь, что $wp_query->query_vars['dios']
действительно установлен
то я просто добавляю регулярное правило