• Работать с сайтом WordPress через git?

    tommy-vercetti, при чем тут БД?
    1. В гит попадает только кастомный код, для всего остального есть composer
    2. База данных может только копироваться с прода на тестовый, ни в коем случае не обратно
    3. То же самое с загрузками, они или синхронизируются с прода rsync'ом, или проксируются локальным сервером на прод
    4. Права на установку плагинов (и прочие нежелательные действия) можно (и нужно) у контент-менеджеров забрать
    5. Большинство других действий автоматизируются с помощью wp-cli
  • Как вынести wp-config.php и wp-content за пределы папки c ядром wordpress?

    Никита,
    Основная сложность это заставить увидеть ВП папку wp-content, которая находится в другом месте.

    Я об этом и говорю. В WP есть некоторые assumptions, грубо говоря местоположение папки с контентом частично захардкожено. И побороть это простым указанием абсолютного пути не получится.

    Неужели апач не может как-то подвязать C:\gulp\projects к текущему виртуальному хосту, чтобы эта директория также была "видна"? Просто думаю что это является основной проблемой и я не верю что апач не может этого сделать.

    Оставьте апач в покое, он тут вообще ни при чем. Для таких задач есть символические ссылки (symlinks). Гуглите как оно у вас в виндовсах, скорее всего кроме обычных "ярлыков" таки должно быть что-то типа ln -s, мелкософт вроде же развивается...

    если есть возможность сконфигурировать апач так как я задумал?

    Конкретно по апачу не подскажу - не использую уже много лет. Впрочем, как я уже писал выше, он тут ни при чем.

    Либо же прошу подсказать как лучше расположить все, используя только одно ядро ВП

    Я вам привел вариант по ссылке на гитхаб. То, что вы хотите в плане организации файлов на диске - совершенно другая история.

    по поводу симлинков я так понял вы говорите что можно как-то дать ссылку на папку wp-content конфигу ВП. Как это правильно сделать?

    Конфиг тут тоже ни при чем. Символические ссылки задаются на уровне операционной системы. Условно, у вас будет лежать папка wp рядом с каждой темой (там где вам надо), но физически эта папка будет лежать в одном месте - из всех остальных мест на нее будет идти только ссылка.

    Я просмотрел ваш репозиторий, суть в принципе понятна, но там опять таки предлагается использовать свое ядро в каждый новый проект, то есть не так как я задумал, принцип похож на roots/bedrock.

    Я имел в виду, что вы можете в папке app/themes держать все свои темы и вообще весь кастомный код, это удобнее чем стандартная установка. А WP лежит отдельно рядом, композером его можно откатывать на любую версию для тестирования ваших тем и тд. Как вариант - вот эту самую папку app/themes сделать символической ссылкой на C:/Gulp/Projects (где будут папочки, каждая из которых - тема). Приблизительно получите то, что хотите, только немного с другой стороны.
  • ImageBank для Wordpress, как правильно организовать?

    Пычев Анатолий, Удачи) Если в процессе будут более точечные вопросы, в рамках Тостера - обращайтесь
  • ImageBank для Wordpress, как правильно организовать?

    Пычев Анатолий,
    Я задал вопрос, что бы определить оптимальный путь для меня

    Чтобы подсказать оптимальный для вас путь, нужно понимать ваш уровень. А то получится что вы будете прижаты к стенке чужим решением, которое (возможно) будет для вас слишком сложным.

    Ну и немаловажно скорость работы получившегося сервиса, особенно на выдачу обрезанной картинки по запросу

    Для этого есть кеширование - ресайз создается один раз при первом запросе, после этого картинка сохраняется в файловую систему и отдается простой проверкой на существование файла - есть файл отдаем его из файловой системы, нету - генерим, пишем в файловую систему и отдаем оттуда. Поверх всего этого уже можно прикручивать CDN.

    Я так понимаю нарезка должна производится один раз, а потом уже просто отдаваться сохраненная копия.

    Да, все верно.

    Может уже есть какие то готовые сборки с подобным функционалом?

    Такие, которые подойдут именно под ваш use case - очень вряд ли.

    Логика здесь примерно такова:

    1. Сохранять картинки как записи типа attachment не подойдет, потому что ID на разных сайтах будут разные.
    2. Соответственно, стандартная медиа-библиотека вам не подойдет, потому что она привязана к этим самым ID.
    3. Сами картинки везде к записям (товарам) будут привязываться не по ID, а по урлам, либо если по ID - то храниться эти ID должны в какой-то общей базе данных, используемой одновременно обеими сайтами, чтобы не было конфликтов.
    4. Хранить подобные данные можно в мета.
    5. Возможно понадобится какой-то свой интерфейс по типу медиа-библиотеки для управления этими картинками.

    ИМХО, ввязываться в такую авантюру нужно только хорошенько обдумав и запилив для начала какой-то proof-of-concept, чтобы понимать итоговую сложность и масштаб трагедии. В вашем случае, если честно, я не вижу необходимости так все усложнять - место на серверах нынче стоит копейки. Редактора и так будут редактировать контент и там и там, догрузить картинку не проблема.
  • Как скрыть часть текста на странице архивов? (Текст выведен через the_content())?

    godsplane, с помощью CSS в принципе можно решить, но имхо это костыль. Заказчик не насекомое, должен все-таки быть обучаем. Это же не rocket science :)
  • Как скрыть часть текста на странице архивов? (Текст выведен через the_content())?

    godsplane, вам принципиально выводить форматирование в этом фрагменте? Если да - тогда самый разумный вариант предоставить кастомное поле "lead content", в виде wysiwyg редактора. Хранить это поле в метаданных. Выводить как отдельное, целиком, вместо the_content. Выводить как есть, со всеми тегами. Единственный минус - туда руками контент писать надо. Статья (основной текст) отдельно, вот этот короткий анонс - отдельно. Может прозвучать как лишняя работа контент-редактору, но в реальности если вам не плевать на СЕО, то так и должно быть - ручные анонсы с правильными ключевыми словами принесут намного больше пользы, чем автоматически сгенерированные из начала большого текста.
  • Как скрыть часть текста на странице архивов? (Текст выведен через the_content())?

    godsplane,
    это вылилось в ту же проблему что и с the_excerpt(). Форматирование текста нарушается и ссылки становятся не кликабельными

    Это не баг, это фича. Мы вырезаем специально ВСЕ HTML теги, с помощью $content = strip_tags($content);
    Зачем это делается? Потому что есть вероятность, что строка будет обрезана посередине тега, например в первые 200 символов попадет <a href="https://some.url/, а закрывающая часть "> будет обрезана, потому что достигнут лимит в 200 символов. И все, с этого места и до конца страницы у вас одна большая сломанная ссылка. Чтобы этого не произошло, теги вырезаются.
    Собственно, в этом ответе я продемонстрировал эту проблему - вот как выглядит мой ответ если не оборачивать эти фрагменты ссылки в тег code:
    5d9a372eeaf4c254106096.jpeg

    и я так понял вы в регулярке зашифровали слово any? Почему просто не написать any?

    1. В регулярках ничего не зашифровывается
    2. Там нет никакого any
    3. Что делает данная регулярка:
    5d9a36ba4218a583780674.png
  • Нужны ли модели для смежных таблиц?

    Twitt, если пивот только проставляет связь, то точно НЕ нужно. Если в пивоте есть дополнительные поля - тогда вероятнее всего уже есть смысл думал о пивот-модели. Но не факт что уже пора делать. Принцип простой - начинайте без пивот-модели, по мере дальнейшего написания кода / роста проекта когда отдельная модель понадобится - вы поймете. Добавить ее не будет проблемой.
  • Как скрыть часть текста на странице архивов? (Текст выведен через the_content())?

    godsplane,
    /**
     * Trim content on archive pages.
     *
     * @param string $content
     * @return string
     */
    function trim_content_on_archive($content)
    {
    	// If we're on archive page, modify content.
    	if (is_archive())
    	{
    		// Strip all HTML tags so they don't break your layout.
    		$content = strip_tags($content);
    		// Trim content to 200 characters but make sure the words aren't chopped.
    		$content = preg_replace('/\s+?(\S+)?$/', '', substr($content, 0, 201));
    		// Append ellipsis to the end of the string.
    		$content .= ' ...';
    	}
    
    	// Return the (optionally modified) content from the filter.
    	return $content;
    }
    add_filter('the_content', 'trim_content_on_archive');

    Вот результат вывода the_content() на странице архива:

    5d9a1fee866c1263999662.jpeg
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, на здоровье, рад что проблема решилась в любом случае. А по поводу использования pre_get_posts - найдите время чтобы разобраться с этим, поскольку такой способ является канонически правильным и более производительным.
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, зависит от того как вы составите изолирующее условие. В функции на этом хуке первой строкой идет ряд проверок в IF - это и есть оно. Если вы там рядом с другими необходимыми условиями поставите is_category(7), то этот код будет выполняться только для архива рубрики с ID=7. Для всех остальных - нет.
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, да, можно в functions.php, а результат получать как при обычной работе - while(have_posts) : the_post() и все. С помощью этого хука вы просто модифицируете параметры основного запроса, который так или иначе будет выполнен. Но если вы измените его - он уже будет выполнен не с дефолтными параметрами, а с учетом ваших пожеланий.
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, Ну, во-первых, если это просто архив рубрики "События" в стандартном шаблоне, то вам не нужно делать кастомный WP_Query - основной запрос под эту рубрику уже существует, выполнился и вернул результаты по этой рубрике. Кастомным запросом WP_Query вы просто дублируете то же самое, выбрасывая основной запрос (Main Query) на помойку. Чтобы не городить этот костыль существует хук pre_get_posts. В нем вы можете изолировать необходимый запрос (is_main_query, ! is_admin, is_category(7)) и изменить его параметры. Вот например по ссылке есть такой пример:

    Example for how to universally adjust queries for an ‘event’ post type:

    function university_adjust_queries($query){
       if ( ! is_admin() && is_post_type_archive( 'event' ) && $query->is_main_query() ) {
            $query->set( 'meta_key', 'event_date' );
            $query->set( 'orderby', 'meta_value_num' );
            $query->set( 'order', 'ASC');
            $query->set( 'meta_query', array(
                array(
                    'key'     => 'event_date',
                    'compare' => '>=',
                    'value'   => date('Ymd'),
                    'type'    => 'numeric',
                )
            ) );
       }
    }
    add_action( 'pre_get_posts', 'university_adjust_queries' );
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, а, ну да. Запрос вернул ноль постов по такому критерию. И дело не в сортировке. Записи в этой рубрике точно есть? Это посты или может нужно добавить параметр post_type?
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, Попробуйте вывести $event_query->posts, нас интересует что там. Сам запрос:
    SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) WHERE 1=1  AND ( 
      wp_term_relationships.term_taxonomy_id IN (7)
    ) AND ( 
      wp_postmeta.meta_key = 'start_date'
    ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'tribe-ea-success' OR wp_posts.post_status = 'tribe-ea-failed' OR wp_posts.post_status = 'tribe-ea-schedule' OR wp_posts.post_status = 'tribe-ea-pending' OR wp_posts.post_status = 'tribe-ea-draft' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_postmeta.meta_value+0 ASC LIMIT 0, 10

    Выглядит вроде норм по части ORDER BY. Возможно вопрос таки в формате данных в этом метаполе или же в других параметрах запроса - категории, типах поста и тд.
  • Почему не работает сортировка по произвольному полю WordPress?

    zahar_92, Выведите значение поля start_date с помощью var_dump / xdebug и посмотрите его тип.
  • Как сделать общие куки у поддоменов в Wordpress?

    Виталий Миронов, Тогда хз, дебажить надо. Без кода точно помочь не смогу, сорян.
  • Как скрыть часть текста на странице архивов? (Текст выведен через the_content())?

    godsplane, фильтр без return не вернет ничего, так и должно быть. Он принимает данные, обрабатывает и потом обратно их должен вернуть. Найдите код, тогда смогу помочь.
  • Как сделать общие куки у поддоменов в Wordpress?

    Виталий Миронов, если не мультисайт, то да, не будет. В этом случае надо смотреть вашу реализацию по поддоменам, без кода тут сложно что-то сказать.
  • Где могут быть заданы перенаправления сайта на другой домен?

    bitrix0ID, говнокод где-то имеет место быть :) где - хороший вопрос. Есть еще вероятность влияния кешей, но хз, сомнительно.