Задать вопрос
  • Как вылечить сортировку кириллицы в get_terms?

    Крил: Ну, если дело в том, что ячейки таблицы в бд у вас с одной кодировкой, а данные внутрь записаны с разной - где с такой же, а где с другой, то так и будет, по логике. Впрочем, не берусь гарантировать, давно не сталкивался с подобными глюками, лет 8. Нифига уже из тех старых костылей не помню
  • Как сделать автоматический перевод qTranslate X?

    artyom_jeman: а нам в воскресенье заняться нечем))) Я холостяк, мне к 8му марта готовиться не надо :)
  • Как сделать автоматический перевод qTranslate X?

    dimasmagadan: Ишь как пригорело))

    По контрибьюторству - ну вы собсно в холивар и ушли. Спорить смысла действительно нет, о чем я написал в предыдущем комменте. Если вам комфортнее, если "последнее слово" остается за вами - пусть так и будет, закрыли тему.

    По плагину - аккурат точь в точь то, что я говорил - ПРОТОТИП, PROOF OF CONCEPT. Все остальные ваши "ограничения" - это оправдание. По сути, вы уложились в эти пресловутые 2 часа, но то, что вы сделали, не является готовой работой, и клиентом принято быть не может. Я уж молчу про то, чтобы самому быть удовлетворенным результатом за который не стыдно. Да и с этим кодом вы лукавите. С магазином :)

    Не сделано вообще, по вашим же словам:

    - нет работы с реальными используемыми языками и с произвольным их количество (надо из qTranslate X получать активные, получать язык по умолчанию и работать с ними, это +2 функции) - 15 минут
    - документирования нет, ну да ладно, пусть это будет моя персональная заморочка - 30 минут
    - крона нет, а с ним как раз предостаточно нюансов - задача, обработчик ошибок и повторное назначение, garbage collector и тд + отладка - смело добавляйте 2 часа сверху. Я лично к крону отношусь положительно, но имея опыт работы с ним, отношусь к также и осторожно. - 2 часа
    - вы делаете для юзера, значит опции нужны, хардкодить нельзя (то же касается языков) - 30 минут
    - переводите только тело поста, нет ни заголовка, ни мета. Не совместимо ни с одним плагином, который добавляет мета - SEO, ACF, WooCommerce и тд. Никуда не годится, голый прототип. Для того, чтобы отслеживать корректно все мета - еще часа 2 накидываем сверху
    - код работает только с постами, не работает со страницами custom post type (и уж тем более не учитывает какие post types разрешены для перевода) - еще 1 час
    - код не работает с taxonomies - и встроенными, и кастомными. И также не учитывает настройки qtranslate - еще полчаса (reuse кода из предыдущего пунтка)
    - код побъет кучу лишнего - например shortcodes - минимум 1 час
    - запросы кешировать можно, но в данном случае необязательно

    Итого, сверху: 7 часов 45 минут. Как я и говорил изначально.

    Повторюсь, вы за час слепили proof of concept. Годно, но это не конечный результат который можно отдавать за деньги. Вы создали клиенту больше проблем, чем у него было в самом начале. По сути у вас 3 простые фичи - взять тело поста, отправить на апишку на перевод, забрать из апишки ответ и сохранить. Этого недостаточно, чтобы брать за это деньги и называть это работой.

    + беглое code review:

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

    > На мой взгляд, если у вас по задачам итоговое время всегда и в несколько раз превышает предварительную оценку, вы что-то делаете не так.
    Совершенно верно. Были случаи лет 10 назад, каюсь. Горьким опытом научен, что "эгэгэй, гасконь!" - плохая практика. С тех пор предпочитаю считать вдумчиво.

    > Но если и эти правки делать, то тогда я бы как вы, не смог бы уложится в заявленный бюджет/сроки)
    Отож! Вот я об этом же. А без этих правок - это голый прототип, а не готовая работа.

    ЗЫ: Вот честно, вы же сами прекрасно все понимаете. Зачем этот спор? Вас так выбесило мое "контрибьютор", что вы готовы угробить половину выходного дня на то, чтобы доказать всему миру, что я неправ? :) Я "пушу" мультиязычность в ядре при каждой возможности и активно работаю с несколькими плагинами - Polylang, qTranslate X (ранее с оригинальным qTranslate), WPML, в том числе и контрибьчу, в том числе иногда и код (не считая отлов багов и тестирование). Если уж вас так коробит от этого слова - читайте как "хорошо знаю код плагина".
  • Поиск только по заданной таксономии Wordpress?

    Андрей: Задача как раз не сложная, вопрос только в отладке. Я сейчас попробую на локалке сделать, а то код выше из головы написан, не тестил. Может быть где-то ошибку допустил.
  • Как вылечить сортировку кириллицы в get_terms?

    Крил: Значит передается, с запросом все ок. 99% проблема в данных, в кодировке.
  • Поиск только по заданной таксономии Wordpress?

    Андрей: Окей. По идее аяксовый поиск должен юзать основной цикл, но посмотрим. Через пару минут обновлю свой ответ, потестите на страничке поиска сначала, а потом уже аякс.
  • Поиск только по заданной таксономии Wordpress?

    Андрей: о, это совсем другая задача, тут сложнее. То есть, мы все еще ищем по постам как обычно, просто фильтруем результаты - только те посты, у которых есть хоть один термин из заданной таксономии, так?
  • Как сделать автоматический перевод qTranslate X?

    dimasmagadan:
    > ну, я тогда контрибьютор виндов, фаерфокса, скайпа и еще кучи программ, к которым я отправлял отчеты о падениях. По вашей логике так правильно получается?

    Ну вы уж совсем упрощаете. Dev-митинги где идет обсуждение и принимаются решения посещали? Раннее тестирование плотное проводили? Багрепорты писали, воссоздавали у себя баги, отмеченные другими? Находили и предлагали решения этих баг? Документацию писали? Или может ваши ответы из оф. форума поддержки мигрировали в документацию? Если да - тогда поздравляю, вы контрибьютор. Не надо делать из этого слова фетиш. Контрибьютор - этто не только програмер. Это любой человек, любой квалификации, любой профессии, который внес полезный вклад в программный продукт. Все остальное - холиварное семантическое задротство.

    > Получается сейчас они пока сами не решили, убрать перевод или нет.

    Совершенно верно. Как я и сказал, эта фича левая, к qTranslate X отношения не имеет и не поддерживается. Наследие оригинального форка, с первых дней работы над форком оно там, и если сделаете diff'ы, то увидите, что там практически ничего и не менялось с тех пор. По сути это legacy code, к тому же интегрированный со сторонним проектом. Именно поэтому в одном из обсуждений было принято решение разобраться с ним - выпилить или переделать/доделать. Для этого и спросили юзеров.

    > У человека, который задал вопрос, совсем другая задача. Ему нужно, чтоб текст автоматически переводился. Не нужна оплата, подтверждение заказов и тп. Ну никак не будет там 900 строк.

    Изучите код, и подобных вопросов не возникнет. Нет там никакой оплаты вообще. Все это - на стороне того сервиса. В этом файлике как раз тот функционал, о котором выв говорите.

    > Убедили. Сейчас, напишу основное, посчитаю и время и объем кода

    Ну, если вы уж прям уперлись - пишите. Но это трата времени. "Напишу основное" - это как раз вот та беда, о которой я изначально говорил, "на полшишечки беременна". Это в лучшем случае будет прототип / proof of concept, но даже не minimum viable product. И чтобы превратить этот прототип в реально работающую фичу, понадобятся пару часов тестирования. Плюс документирование кода. Вот вам и рабочий день, про что я изначально сказал сразу. И никак не 1 час (ну ок, 2). Поверьте, моя реакция изначальная аналогична - "да **ли тут писать, запросил апи, записал между тегов, если ошибка какая-то - кинул в крон, ну добавил еще мусорособрщик". Но опыт написания плагинов с такой вот гасконской оценкой показывает, что в реальности конечное затраченное время в несколько раз превышает первичную оценку. Потому что нюансы.
  • Поиск только по заданной таксономии Wordpress?

    Андрей: оу... пишите сразу - уровень новичок :) Моя догадка по поводу поискового слова = термин таксономии верна? Если да - сейчас обновлю код. Вставлять в functions.php вашей темы.
  • Как вылечить сортировку кириллицы в get_terms?

    Крил: не, внутри фильтра надо) примерно так:
    function debug_data( $orderby, $args, $taxonomies ) {
        var_dump( $orderby );
        var_dump( $args );
        die();
    }
    add_filter( 'get_terms_orderby', 'debug_data' );
  • Как реализовать вывод записей в виде колонок разного вида?

    Расул Гитинов: На здоровье. Если кратко и в общих чертах - ширина блока .item - 33%, с помощью модификаторов (:nth-child) просто меняете ее на 66%, вот и вся математика. Ну и margin / padding пересчитать, естественно.
  • Как сделать автоматический перевод qTranslate X?

    dimasmagadan: Слышали звон, да не знаете где он :) Зато потроллить - с удовольствием :))

    1. Contributor - это не только тот, кто код контрибьютит. Есть еще бета-тестинг, обсуждения, ответы на форуме оф.саппорта, обучение и тд. GitHub показывает только контрибьюшны строчек кода, что не является точным показателем. К примеру, в стандартной теме Twenty Sixteen согласно GitHub у меня огромный вклад по количеству строк. В реальности же я плотно занимался Coding Standards в первую очередь, и большая часть этих строк - оформление чужого кода. Что касается qTranslate X - там и в коде есть парочка моих правок, но они не делались в виде PR, поэтому "зачислены" в актив John'а. Не в этом дело, в общем.

    2. Translation Service в qTranslate X - это старый, унаследованный от оригинального qTranslate сервис, который никак не связан с qTranslate X, не поддерживается командой, и, что самое важное, является платным сервисом ручного перевода - там профессиональные переводчики за денюжку ручками переводят. www.marius-siroen.com/qTranslate-X/TranslateServices - вот тут описание и вопросник, который команда qTranslate X недавно запустила для выяснения, нужны ли свои сервисы. На данный момент общее командное мнение прежнее - не нужны и не планируются (как и написано на страничке плагина в репозитории WordPress.org). Именно эту позицию, актуальную на данный момент времени, я и озвучил. Впрочем, мир OSS тем и хорош, что если юзерам это надо будет (например, по результатам этого опросника), то данная фича будет разработана и добавлена.

    3. И, наконец, последнее. Внимательно изучите те ~900 строк кода, на которые вы сослались. Если вы все еще утверждаете, что вот такой функционал можно написать за 1 (ну ок, 2) час и нормально оттестировать - напишите. А потом расскажете, сколько реально это заняло времени.

    Мой категоричный отрицательный ответ был по нескольким причинам:

    - в текущей версии плагина этого функционала нет.
    - надстройки для этого функционала в виде адд-она тоже нет (насколько мне известно).
    - топикстартер не разработчик, уровня его знаний чтобы самому написать подобный модуль недостаточно.
    - данный функционал - не одна функция на 20 строчек, получить код целиком на Тостере не получится.
    - писать такой функционал можно, но нецелесообразно. Во-первых, недешево. Во-вторых, есть готовые специализированные решения именно для машинного перевода, без qTranslate X.

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

    Расул Гитинов: Расул, предоставленный код именно для вашего случая :) У вас кратность повторения блоков = 10, каждый 5й нечетный (5, 15, 25 и тд) и каждый 9й имеют двойную ширину, именно эти селекторы я вам и написал. Вам помочь с самими стилями для сетки?
  • Как вылечить сортировку кириллицы в get_terms?

    Крил: попробуйте принудительно задать 'order' => 'ASC', а также проверьте через фильтр get_terms_orderby что там внутри сформировалось.
  • Как увеличить время выполнения скрипта на php?

    dj_vadim: конфиг апача/nginx, в виртуалхосте. Также смотрите есть ли кастомные php.ini для виртуалхостов. К тому же, убедитесь, что редактируете конфиг нужной версии, опенсервер же с кучей версий идет.
  • Как сделать автоматический перевод qTranslate X?

    dimasmagadan: была такая программа, "угадай мелодию". Мой ответ - делайте :)
    По сути: алгоритм в целом ок. Но есть огромная тележка нюансов. И первый из них - это крон. Не работает с full page cache, да и вообще работает крайне нерегулярно. К тому же, переложив на него обращения к внешним ресурсам вы рискуете их из-за упомянутых ранее особенностей наплодить достаточно для того, чтобы сервер ответил таймаутом. Ну и, привет race conditions. И это только так, в общих чертах. Если уж и идти этим путем - то делать переводы / запросы к АПИ одновременно с созданием языковой версии - создали клон поста на другом языке, выполнили запросы, обновили данные в БД. Но и тут есть нюансы (хоть и меньше, чем с кроном). Далее - АПИшка гугла имеет лимиты по запросам. Их тоже код должен учитывать, и, например, перекидывать текущю задачу на крон. В это же время, что делать с непереведенным контентом? По хорошему, надо его делать драфтом, и менять статус на publish только после успешного осуществления перевода (по крону). Это дополнительная логика. Ну и так далее.

    Я не говорю, что этого нельзя сделать. Можно. И ничего архисложного тут нету. Но если делать не костыль, а так, чтобы оно нормально и стабильно работало, то есть вагон нюансов, которые надо учесть, все это разработать, оттестировать и тд. Тут совсем не час работы, это вполне реально выйдет в рабочий день. Учитывая вашу ставку, $20 * 8 = $160. У меня ставка выше, значит и конечная стоимость будет выше. Это уже цена, которую я и назвал "кусючей". Есть готовые плагины именно для Google Translate. Автору лучше посмотреть на них, это будет бесплатно.
  • Как правильно отдать контент через Nginx?

    OKNOZA: Данный код реально отдает эти заголовки. Проверьте curl -I есть ли они. Если нет - тогда что-то не так настроено. Если есть, но все равно не работает - тогда проблема в другом месте.