Не работает is_page
-
Пишу плагин который должен проверять на какой странице находится пользователь и если страница соответствует заданной в настройках и пользователь находится не под аккаунтов который тоже был задан в настройках плагина. И у меня возникла проблема с проверкой на какой странице находится пользователь а именно с функцией is_page.
-
С функцией
is_page()
в общем случае тоже всё нормально 🙂По приведённому фрагменту кода больше ничего сказать нельзя. Чтобы воспроизвести проблему, нужно хотя бы знать, в каком месте и в какой момент он выполняется.
Sergey Biryukov, с переменными все нормально
пример вардампа для них можете привести?
Весь код файла в котором этот фрагмент:
<?php /* Plugin Name: Access2Page Plugin URI: http://maks12345.biz.ua Description: Плагин закрывающий доступ к определенной странице Author: maks12345 Version: 1.0 */ add_action('admin_menu', 'mt_add_page'); function mt_add_page() { add_menu_page ("Access2Page", "Access2Page" ,8 ,"accesstopage", 'page_data_show'); } function page_data_show() { $pernana = 'http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/pernana.php'; $secpage = 'http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/secpage.php'; $secuser = 'http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/secuser.php'; echo "<h2>Access2Page</h2>"; echo <<<EOF <form action="$pernana"> Перенаправлять на: <br/><input type="text" name="data" style="width:400px;" value="http://google.com"> <br/><input type="submit" value="Сохранить"> </form> <form action="$secpage"> Закрыть доступ к странице (писать название): <br/><input type="text" name="data" style="width:400px;" value="SuperSecretDataPage"> <br/><input type="submit" value="Сохранить"> </form> <form action="$secuser"> Разрешить доступ пользавателю (писать название): <br/><input type="text" name="data" style="width:400px;" value="Admin"> <br/><input type="submit" value="Сохранить"> </form> EOF; } add_action('wp_head','access2photo',0); //add_menu_page ("Настройки плагина Access2Page", "Настройки плагина Access2Page" ,1 ,"menu.php"); function access2photo() { $pernana = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/pernana.txt'); $secpage = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/secpage.txt'); $secuser = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/secuser.txt'); $user = wp_get_current_user(); //Тут начинается проблемный фрагмент кода if ( is_page($secpage) ) { if ( $user->user_login !== $secuser ) { wp_redirect($pernana); } } } ?>
Flector, какого вардампа?
что это такое?
$secpage = file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/wp-content/plugins/accesstopage/secpage.txt');
что оказывается в $secpage то?
проверьте черезvar_dump($secpage);
потому что очевидно, что там не то, что хочет функция is_page. напоминаю, что is_page в качестве параметров принимает ID, slug или title страницы. в единственной числе. если не единственное — то надо использовать массив.
поэтому очевидный вопрос — что у вас в результате оказывается в $secpage?
а в общем — структура вашего плагина ну просто безобразна.
прям пример того, как не надо писать плагины для wordpress.
в wordpress есть туева куча функций для сохранения и чтения настроек из базы данных — зачем вам эти левые файлы в папке плагина?//Тут начинается проблемный фрагмент кода
Если перед ним добавить
var_dump( $secpage );
— что выдаётся?Допустим, в файле
secpage.txt
записан правильный ID или ярлык страницы, но там могут быть пробелы или переводы строки, в функцииfile_get_contents()
может быть запрещён доступ черезhttp://
, и т.д. Нужно проверить значение на каждом этапе.Не проще ли хранить настройки в базе данных, а не в файлах?
Flector, string(7) «123QQ»
а «123QQ» это что у вас?
В
123QQ
— 5 символов. Или кавычки — часть строки?Sergey Biryukov, string(7) «123QQ»
ну вот взял я ваш код:
function access2photo() { $pernana = "http://www.wptest.ru/favorites/"; $secpage = "map"; $secuser = "guest"; $user = wp_get_current_user(); if ( is_page($secpage) ) { if ( $user->user_login !== $secuser ) { wp_redirect($pernana); } } } add_action('wp_head','access2photo',0);
все работает.
при открытии страницы http://www.wptest.ru/map/ меня перенаправляет на http://www.wptest.ru/favorites/, так как мой ник на сайте не guest.так что у вас на сайте
123QQ
? ID это быть не может, ярлыком тоже. это точное название страницы?-
Ответ изменён 7 лет, 5 месяцев назад пользователем
Flector.
Flector, это у меня на тестовом сайте страница для проверки плагина, Ида попрубоуй зайти на testsite.maks12345.biz.ua и перейти на страницу 123QQ (она есть в меню) оно должно перенаправить тебя на Google
Юрий, просто 123QQ без кавычек
кавычки у вас часть названия.
потому что иначе было бы string(5)содержимое secpage.txt какое?
точно — приведите тут в тегах code.и вообще — возьмите за привычку весь код вставлять через теги code.
потому что непонятно, что у вас там за кавычки. там должны быть знаки дюйма в вардампе, то есть"
— у вас же елочки непонятные. и то ли это форум постарался, то ли елочки у вас часть названия страницы в файле.'123QQ' != '123qq'
-
Ответ изменён 7 лет, 5 месяцев назад пользователем
- Тема «Не работает is_page» закрыта для новых ответов.