• Пишу плагин который должен проверять на какой странице находится пользователь и если страница соответствует заданной в настройках и пользователь находится не под аккаунтов который тоже был задан в настройках плагина. И у меня возникла проблема с проверкой на какой странице находится пользователь а именно с функцией is_page.

Просмотр 15 ответов — с 16 по 30 (всего 34)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    С функцией 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);
    }
        }
           }
    
    ?>
    • Ответ изменён 7 лет, 5 месяцев назад пользователем SeVlad.
    • Ответ изменён 7 лет, 5 месяцев назад пользователем SeVlad. Причина: Оформляйте, пож, код как следует

    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 есть туева куча функций для сохранения и чтения настроек из базы данных — зачем вам эти левые файлы в папке плагина?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    //Тут начинается проблемный фрагмент кода

    Если перед ним добавить var_dump( $secpage ); — что выдаётся?

    Допустим, в файле secpage.txt записан правильный ID или ярлык страницы, но там могут быть пробелы или переводы строки, в функции file_get_contents() может быть запрещён доступ через http://, и т.д. Нужно проверить значение на каждом этапе.

    Не проще ли хранить настройки в базе данных, а не в файлах?

    Flector, string(7) «123QQ»

    а «123QQ» это что у вас?

    Модератор Юрій

    (@yube)

    В 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.
    потому что непонятно, что у вас там за кавычки. там должны быть знаки дюйма в вардампе, то есть " — у вас же елочки непонятные. и то ли это форум постарался, то ли елочки у вас часть названия страницы в файле.

    • Ответ изменён 7 лет, 5 месяцев назад пользователем Flector.
    • Ответ изменён 7 лет, 5 месяцев назад пользователем Flector.
    Модератор Юрій

    (@yube)

    '123QQ' != '123qq'

Просмотр 15 ответов — с 16 по 30 (всего 34)
  • Тема «Не работает is_page» закрыта для новых ответов.