ligisayan:
1. Вызывается функция create_post_type, на каком хуке?
2. Не делайте flush_rewrite_rules(), это дорогостоящая операция, которая у вас выполняется при каждой загрузке любой страницы. Генерите новые правила вручную в настройках.
3. У вас при включенном ЧПУ должны работать адреса:
domain.com/portfolio_page/ - архив
domain.com/portfolio_page/whatever/ - одна запись
Других URL, связанных с портфолио в вашем коде нет.
ligisayan: Потому что бардак с rewrite rules, при создании custom post type для портфолио, может еще плагины какие-то есть. Код показывайте, скрины админки (страница портфолио, одной работы в портфолио). Сложно что-то говорить не видя что происходит.
Урл вида ?p=123 - это системный урл, не ЧПУ. Значение ?p=123 означает что это запись типа "page" (параметр "p") c ID = 123. То есть, это страница (см. админку, раздел "Страницы"). Отюсда и класс "page" в body. Значение вида ?portfolio_page=mnogostranichnyj-lending - это либо произвольный параметр созданный плагином/темой, либо произвольный тип данных (custom post type) с названием portfolio_page. И его значение здесь - mnogostranichnyj-landing. То есть, WordPress ищет запись с таким slug'ом и типом - portfolio_page. Естественно, это не будет страницей (запись типа "page"). Это будет произвольным типом (запись типа "portfolio_page"), отсюда и отсутствие класс "page".
При включении ЧПУ то, что вы видите в адресной строке, является внешней формой, которая внутри для движка все равно превращается в ту же строку параметров согласно правилам rewrite. Вы просто не поняли, как эта вся кухня работает, ждете класс "page" там, где его и не должно быть. http://сайт/portfolio - это и есть архив записей типа портфолио. Архив, динамическая страница, не page. http://сайт/portfolio_page/mnogostranichnyj-lending - это страница одной записи типа портфолио, она же single / singular, и опять она не page. Вам нужно понять, что page в значении WordPress - это не любая страница в целом, в понимании веб-странички. Это исключительно конкретная запись типа "страница" (page), которую вы создаете в админке в разделе "Страницы" (Pages).
Soho: Это не связанные вещи. Данный фильтр только включает-выключает статус тулбара, к допуску в консоль он не имеет никакого отношения. Видимо у вас еще какой-то код есть, который пытается управлять именно доступом в админку.
Все правильно вам подсказали, history.pushstate позволяет как бы "лазить" по разным урл, при этом оставаясь без перезагрузки, на аяксе. Впрочем, по уму это все делается как SPA - single page app. Например, на React.
Александр Власов: Поиск-замена обычная ломает сериализованные данные. ACF много чего хранит в сериализованном виде - отсюда и проблема. Ранее не использовали ACF и об этом не знали, хотя проблема у вас наверняка тоже случалась, просто вы ее не замечали, ибо мелочи - те же виджеты часто хранят что-то в сериализованном виде, и если там в данных есть урл - привет битые данные. То же касается настроек темы.
Rad Cor: Что-то мне подсказывает, что у вас где-то болтается какая-то мелочь, которая все портит. Потому что должно работать. Мне аж прям интересно. Постучите в скайп (см. профиль), можем созвониться и посмотреть на вашем экране.
AltaiR: Это важные автоматические обновления - ядро и плагины/темы принудительно по инициативе WordPress Security Team. Обычно это фиксы безопасности. Критические апдейты. Отключать данную штуку крайне не рекомендуется.
Что касается обновления плагинов вручную - а зачем это вообще надо? ИМХО, бессмысленная, и даже вредная затея. Но если совсем надо, для плагинов должно быть достаточно:
Rad Cor: Это то же самое, что я вам писал, код аналогичен, только передача параметров идет строкой (что, кстати хуже - строку надо распарсить + неудобно читать, поэтому сразу массивом передавайте). Вы пропустили мое сообщение, одно из последних, где я советовал еще один аргумент добавить: 'meta_compare' => '=',
Это принудительно заставить сравнивать значение.
Алексей: Ну с совсем простыми сайтами это катит, если вы и потеряли где-то мелкие данные (те же postmeta), то и фиг с ним - либо не заметите, либо заметите через неделю, пожмете плечами и руками поправите. Слетит виджет - ну фиг с ним, зашли установили заново. Если же сайт крупный и с кучей кастомного функционала, то такой перенос гарантированно приводит к потере данных. Еще раз - сериализованные массивы вы так не обновите, если попробуете - они перестанут десериализоваться (битые данные), в ваших запросах нет ни слова о других таблицах - options, termmeta, usermeta, postmeta. Я уже не говорю о произвольных таблицах, которых может быть много. Ваш способ ненадежен. Чем крупнее/сложнее сайт, тем менее надежен.
Некоторые разработчики тем вшивают в них лицензию, как и в плагины. Проверка лицензии происходит на сервере разработчика, ессесно. При нарушении лицензирования идет отказ от апдейтов/поддержки и инвалидация лицензии. При попытке установить ту же лицензию на другой сайт выдаст ошибку. Впрочем, при желании это все можно и выпилить. Но согласен, труд надо уважать, тем более деньги небольшие.
Сериализованные данные поломаются, postmeta / termmeta / usermeta вообще не затронутся, а там тоже урлы будут, произвольные опции поломаются. Не делайте так, есть специальные инструменты
Rad Cor: Смотреть в таблице wp_postmeta. Вам нужно знать ID поста из таблицы wp_posts чтобы изолировать только его поля. Но можно и все листать, по последним добавленным постам записи будут в конце таблицы. Ищите там свое поле и смотрите какое у него значение.
Rad Cor: Не сложно. Вопрос упирается в невозможность проверки данных, которые сохранились в БД - у вас нет доступа к базе. Я у себя сделал, не получилось - открыл БД и убедился, что данные не в том формате, который нужен. Изменил тип поля - и все заработало.
1. Вызывается функция create_post_type, на каком хуке?
2. Не делайте flush_rewrite_rules(), это дорогостоящая операция, которая у вас выполняется при каждой загрузке любой страницы. Генерите новые правила вручную в настройках.
3. У вас при включенном ЧПУ должны работать адреса:
domain.com/portfolio_page/ - архив
domain.com/portfolio_page/whatever/ - одна запись
Других URL, связанных с портфолио в вашем коде нет.