ligisayan: Ну почему же, мы изолировали проблему до виджета Visual Composer. Но без кода виджета / ссылки на его документацию дальше мы ничего не сможем сделать.
Vladislav Apalkov: У вас рубрики используются как-то? Если нет - вместо "Без рубрики" создайте "Горизонтальные" и "Вертикальные" - 2 рубрики (термина, технически). Их и отмечайте (присваивайте) при создании / редактировании товара.
exceptional: У меня самая свежая и все работает как надо. Там в 5.5.0 добавлена поддержка новой таблицы wp_termmeta, и теперь данные туда пишутся. Не уверен, что именно из-за этого, возможно еще раньше был баг - я не помню прям все чейнджлоги, а версия у вас достаточно старая уже. Обновите плагин и пробуйте еще раз.
ligisayan: Вот с Visual Composer и надо было начинать. У вас нет никакой проблемы с WordPress и ЧПУ URL как таковыми, есть проблема с тем, как вы пытаетесь это все собрать и как это реализовано в VC.
> архив-то есть like2.likemedia.by/portfolio_page
Естественно есть, его не может не быть, о чем я выше и писал.
> но он без фильтра
Естественно, потому что ваш фильтр - это произвольный дополнительный функционал, предоставляемый Visual Composer.
> и выводится в неподобающем виде
Это потому что для него нужный темплейт не сделан или сделан в неподобающем виде.
> а вот эта страница, которая должна за фильтр отвечать - не выводит ничего
Потому что это - страница. Она выводит контент страницы. Она выводит ровно то, что должна выводить. По идее, она должна вывести вот этот виджет Visual Composer, который, в свою очередь, запросит этот ваш custom post type и выведет на этой странице. Почему он этого не делает - понятия не имею. Это вопрос скорее в поддержку разработчиков этого виджета.
order - это только ASC / DESC - он же порядок, он же по возрастанию или по убыванию. А сама сортировка по какому-то параметру определяется с помощью orderby.
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 вообще не затронутся, а там тоже урлы будут, произвольные опции поломаются. Не делайте так, есть специальные инструменты