Задать вопрос
  • Как подключить wordpress управление к сайту?

    Вопрос совершенно туманный и общий, ответить на него не представляется возможным. Задавайте более конкретные вопиросы.
  • Как много кода помещается на экране разных ноутбуков?

    Жесть... Как можно работать с таким количеством кода одновременно и полным отсутствием адекватного форматирования?!
  • Как в PHPStorm сделать backspace нормальным?

    Вообще-то это полезная фича. Скорее всего вы привыкли в Sublime к какому-то своему стилю форматирования, а в нормальном IDE вам этот самый IDE "мешает". Я бы советовал вам потратить немного времени разобраться с Code Style и всеми настройками в Editor, один раз настроить все на свой вкус, и потом забыть навсегда о ручном форматировании кода - IDE всегда будет делать это за вас (при сохранении, вставке, или по нажатию Cmd/Ctrl + Alt + L.
  • Как правильно написать 2 цикла php foreach?

    Вставьте данные из вашего массива, или мы должны гадать как ваши данные устроены?
  • Почему не срабатывает условие для страниц?

    Shimpanze,
    1) При вставке этого сниппета, вообще не возможно создать страницу с заглавными URL;

    Это не отдельный сниппет, а дополнение к тому, который по ссылке на StackOverflow

    2) Теперь не работает вывод всех записей из категории, допустим «http://site.ru/Рубрикатор/Кулинария»;

    5a3978508078e706306188.jpeg
    3) Не срабатывает автоназначение URL (с Заглавными Буквами) вот здесь:

    5a39790e803ed345333458.jpeg5a397919456d6369345309.jpeg

    Я вообще-то тестил. Если у вас не работает, то проблема точно в другом месте.
  • Почему не срабатывает условие для страниц?

    Shimpanze, см. код выше, проверяй. Если все ок – отпишись, перенесу в ответ. На будущее пригодится :)
  • Почему не срабатывает условие для страниц?

    Shimpanze, кажется проблему нашел. Вот 2 правила rewrite rules, под которые данный урл попадает:
    (.?.+?)(?:/([0-9]+))?/?$	pagename=$matches[1]&page=$matches[2]
    ([^/]+)(?:/([0-9]+))?/?$	name=$matches[1]&page=$matches[2]


    Первое - это страницы. Второе - посты.

    Так вот конкретно для этой страницы почему-то срабатывает правило для постов (и устанавливается переменная name вместо pagename).

    Дальнейшая отладка привела меня в функцию get_page_by_path(), которая таки получает из базы нужную страницу, но после получения результатов идет проверка на совпадения path и $page->post_name (то есть слага), и вот тут случается false, вместо ожидаемого true:

    5a38f615a87c3386427164.jpeg

    А если конкретнее, то вот само сравнение:

    5a38f62ab0439555803434.jpeg

    Как мы видим, строки отличаются регистром, и сравнение == возвращает false:
    ‌‌'%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_jQuery' == '‌%d0%9f%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b_jQuery'
    ‌false


    Осталось копнуть и найти тот момент, где регистр становится верхним. В сам get_page_by_path() строка передается в нижнем регистре. А далее вот в этом месте строка превращается в верхний регистр.
    ‌‌$page_path = rawurlencode(urldecode('%d0%9f%d1%80%d0%b8%d0%bc%d0%b5%d1%80%d1%8b_jQuery'));
    ‌%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_jQuery


    Далее эта строка проходит через фильтр 'sanitize_title', что, теоретически, дает нам возможность ее перехватить и обратить в нижний регистр:
    /**
     * Make sure rawurlencoded part of the path is always lowercase.
     * 
     * @param string $title
     * @param string $raw_title
     * @param string $context
     *
     * @return string
     */
    function lowercase_rawurlencode_path( $title, $raw_title, $context ) {
        if ( $context == 'query' && preg_match( "@^[a-zA-Z0-9%+-_]*$@", $title ) ) { // контекст должен быть query, а строка результат rawurlencode
    
            $title_decoded = rawurldecode( $title ); // декодируем строку обратно
            $title_parts = preg_split( "/(_|-)/", $title_decoded, -1, PREG_SPLIT_DELIM_CAPTURE ); // разбиваем на части по '_' и '-', сохраняя эти самые разделители (чтобы потом собрать обратно)
    
            foreach( $title_parts as $index => $part ) { // перебираем полученные части
                $part_encoded = rawurlencode( $part ); // кодируем часть
                if ( $part !== $part_encoded ) { // если она закодировалась
                    $title_parts[ $index ] = strtolower( $part_encoded ); // приводим в нижний регистр
                }
            }
    
            return implode( '', $title_parts ); // собираем в строку и возвращаем
        }
    
        return $title; // в остальных случаях возвращаем без изменений
    }
    add_filter( 'sanitize_title', 'lowercase_rawurlencode_path', 10, 3 );


    Возможно есть более элегантное решение с точки зрения PHP чем декодирование и перебор, но данное решение работает:

    5a390a704db68269010730.jpeg
  • Почему не срабатывает условие для страниц?

    Shimpanze, Игорь Воротнёв, so far so good:

    5a38de3e366f1771371028.jpeg

    parse_request таки корректно разбирает url и получает страницу из базы. Смотрим дальше...
  • Почему не срабатывает условие для страниц?

    Shimpanze, слаг xPath будет работать, как и положено:

    5a38d2d1f37fb597339969.jpeg

    А вот Примеры_jQuery - не будет, но совершенно по другой причине. Где именно собака порылась - пока не разобрался. Но вот что интересно:

    5a38d98410a8c344304270.jpeg

    Rewrite rule страницы срабатывает, SQL запрос по такому post_name запись находит. Функция get_page_by_path(), собственно, возвращает 1 найденную строку из БД. Но Main Query почему-то ищет запись типа 'post', а не 'page'. Вот это как минимум странно..

    5a38d9f647e1a075512431.jpeg

    Ковыряю, пытаюсь понять почему.
  • Почему не срабатывает условие для страниц?

    Shimpanze, хм.. а зачем столько танцев с бубном?

    Во-первых, это делается ручками достаточно легко, см тут https://wordpress.stackexchange.com/questions/5029... Код там старый, но переписать свежую версию не проблема:
    1. Берете код функции ядра sanitize_title_with_dashes()
    2. Копируете себе в плагин / functions.php темы под своим названием
    3. Убираете из кода все что связано с strtolower / mb_strtolower
    4. Отключаете из хука дефолтную функцию и подключаете свою (как в ответе на StackOverflow)
    5. Профит!

    Во-вторых, это не очень разумно делать. Для поисковиков регистр пофиг, для самого URL - не пофиг, ибо по спецификации он case sensitive (все, что кроме доменного имени). И для PHP / MySQL в обработке тоже все будет case sensitive. Что это означает? То что простым пользователям нафиг не нужно запоминать что у вас страницы в верхнем регистре, они будут писать в привычном нижнем. А это будет приводить к 404, так как страниц с такими названиями существовать не будет (ибо одна и та же страница со слагом в верхнем и нижнем регистре - это две разные страницы). Это, конечно, можно обойти - хукнуться куда-нибудь в самое начало обработки запроса и перезаписывать значения в $_SERVER, делая первую букву заглавной. Но это гемор еще тот будет, запутаетесь в отладке всех кейсов.
  • Почему не срабатывает условие для страниц?

    А что это вы такое интересное пытаетесь сделать? Что это за куча проверок таких?
  • Почему тормозит SELECT запрос (выполняется 0.5 сек)?

    Preci,
    она 50 комментариев к записи выводит по 3-4 секунды (первый раз),

    3-4 секунды это что? Это суммарно запросы к БД? Это суммарно весь бекенд? Это полная загрузка страницы на фронте?

    А да, мне зря кажется подозрительным что простой SELECT * с LIMIT 30 на "холодную" выполняется 0.5 сек?

    Нет, не зря. Это очень долго.
  • Как добавлять и удалять отдельный пункт меню в зависимости от разрешения экрана динамически?

    Илья, сделайте 2 меню, одно только с этим одним пунктом, второе - обычное ваше меню (но тоже с этим пунктом). И включайте-выключайте этот ваш пункт в одном из меню когда надо, с помощью CSS.
  • Как добавлять и удалять отдельный пункт меню в зависимости от разрешения экрана динамически?

    Илья, так она как раз вам и позволяет это сделать:
    if ( wp_is_mobile() ) { // true -> мобильное устройство
    
    } else { // false -> десктоп
    
    }

    Но, как я написал в ответе, лучше делать через CSS. Выводите нужный пункт меню на фронтенд всегда. Через редактор меню назначьте нужному пункту произвольный CSS-класс, чтобы легко его таргетировать, и с помощью media query показывайте или прячьте когда надо. Делать это на серверной стороне - не совсем правильно.
  • Нагрузка на Wordpress?

    Юрий Горбунов, вы когда-нибудь слышали про ElasticSearch? Или Algolia? Выполнять сложные выборки по БД, тем более по skinny-таблицам без адекватных индексов (а-ля wp_postmeta) не нужно вообще, ни через WP_Query, ни своими запросами. Для таких задач используюется поисковый сервис, который держит данные в совершенно другом виде, ищет мгновенно и возвращает ID найденных записей, которые уже скармливаются стандартному WP_Query. А для WordPress вообще есть ElasticPress, который позволяет интегрировать ElasticSearch вообще без лишних телодвижений и головной боли.
  • Как настроить веб-сервер с виртуальными хостами на маке?

    Anton Mashletov, не несите чушь. Во-первых, Homestead - это тот же Vagrant который, как вы говорите, круче. Во-вторых, он уже стандартизирован, а значит среда разработки у всех в команде идентична, благодаря использованию одного и того же инструмента. В третьих, избыточности там нет, если у вас чуть более одного проекта. Никаких зоопарков. В чем избыточность? В нескольких версиях PHP и разных движках БД? Так проекты же разные, стеки разные. Тем более если учесть основные плюсы. Опять же, если что-то вам лично не нужно - редактируете конфиг и "облегчаете".
  • Как сделать импорт и экспорт баз данных в Wordpress?

    danil_linkins, Да, есть какие-то экспорты-импорты, есть bulk edit которые позволяют менять характеристики оптом, но лично я не встречал ни одного действительно адекватного (даже платного). Впрочем, пробовать довелось не все, поэтому прям полноценной статистики у меня нет.

    В вашем случае я бы подумал над 2мя вариантами:

    1. Написать свой экспорт и импорт, продумав формат (что нужно менять). Это не так уж сложно как кажется на первый взгляд (если вы разработчик конечно).
    2. Если подобные изменения могут понадобиться и в будущем, возможно больше смысла есть написать свой функционал и UI для админки, чтобы нужные характеристики оптом менять в админке. Тут работы поболее будет, но тоже вполне реализуемо.