Иван Козлов: Если говорить про машинный код, то это нано-оптимизация, от которой толку ноль. Прогоните через профайлер и посмотрите узкие места. Упомянутый вами "путь дзен" - это совершенно ненужная якобы оптимизация. А вот удобство и гибкость она рубит на корню, ибо в функции есть хук, а в вашей переменной его нет. Значит, значение, возвращаемое функцией я могу фильтровать при определенных условиях, а вашу переменную - только перезаписывать. Грубо и неэффективно. Я уж молчу о том, что у переменной должен быть контекст и любой сторонний разработчик должен сразу понять что эта переменная означает, где она определяется, какое значение содержит, в каком виде / формате, и не перезаписывает ли ее случайно код из другого места...
The_Lars: Конечно можно. JetPack упомянутый правда не подойдет. А руками все это прекрасно делается, тут WordPress вообще ни при чем, галереи он вам позволяет делать из коробки. А вот как эта галерея выглядит и работает на странице - это уже вопрос к теме и html+css
Влад: Там есть код, который вы подключаете на фильр locale, и включаете нужный язык. Это, как говорится, "куда копать". А чтобы реализовать вашу задумку, надо сделать эти кнопочки / селект, придумать как эти данные (выбор пользователя) передавать / хранить - куки, localstorage, передавать в GET и тд. А потом уже, в зависимости от метода хранения, забираете оттуда данные и подставляете их в этот фильтр.
Впрочем, я уверен что если хорошо поискать в репозитории wordpress.org/extend/plugins то найдется уже что-то готовое.
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.