Ну и, конечно, ссылку на страницу-заглушку можно обернуть в noindex, добавить к ней rel="nofollow", саму страницу-заглушку запретить к индексированию в robots.txt
если у вас открыта страница отдельной записи, то функция is_singular() вернет true.
если у вас открыта категория, она вернет false и код дальше не будет работать
ну и, соответственно, функция по ссылке выше не будет работать как надо на странице категорий.
Андрей Кочеласов: что-то у вас их очень много. Точно лишних нет?
У меня тоже есть сайт на авто тематику, с объявлениями. Сайту лет 8.
За все время существования 621 марка-модель
В двух словах
Наткнулся на хабре на его статью, посмотрел видео, возмутился, что все ужос как криво, написал ему про это в комментариях на ютубе.
Комментарии мои он потер, оставил свои, где написал, что я не прав.
Поэтому снял видео, где коротко показал, где и что он делает неправильно.
Это было год назад. Тогда я его все же убедил, что он не прав. Обещал видео переделать/сделать лучше (точно не помню, эти комментарии он тоже потер).
Посмотрел сейчас его новые видео (на перемотке пару 2х часовых роликов про WordPress), особо ничего не поменялось) По его видео учить людей нельзя.
Заранее:
новый "обзор" делать сейчас лениво и будет неудобно - кода из видео в удобном виде нет, просматривать 2х часовые ролики для выявления багов и объяснения почему так нельзя, это не совсем то, что я бы хотел делать в выходной.
Поправлю.
Лучше не придумывать задачи самому. Не факт, что придуманное в реальности будет востребованным.
А посмотреть по сайтам фриланс бирж за решение каких задач люди просят деньги. Дальше уже ставить виртуалку и отрабатывать эти или схожие задачи.
artyom_jeman:
>а нам в воскресенье заняться нечем))) Я холостяк, мне к 8му марта готовиться не надо :)
аналогичная ситуация)
но, не будем отвлекаться.
Игорь Воротнёв: вы не особо внимательно смотрели мой код
>нет работы с реальными используемыми языками и с произвольным их количество (надо из qTranslate X получать активные, получать язык по умолчанию и работать с ними, это +2 функции)
беру реально используемые языки https://gist.github.com/Dimasmagadan/cfc5623433ea3...
Насколько помню, язык по умолчанию лежит в той же переменной. Сейчас смотреть лень.
Как уже писал выше, дописать для остальных языков (чтоб работало если их больше 2х), будет 10-15 минут
>документирования нет
Ну так и в "вашем" плагине документирована только очень небольшая часть кода. Если сравнивать, то в процентах по отношению к коду количество комментариев в моем коде выйдет больше или равным)
Объем моего кода очень небольшой, дописать документацию займет 10-15 минут.
>вы делаете для юзера, значит опции нужны, хардкодить нельзя (то же касается языков) - 30 минут
Какие 30 минут?
30 минут добавление опций займет только в том случае, если у вас это первый проект и нужно будет читать документацию и по ней делать опции. Если уже есть опыт добавления через options api, что мешает скопировать с прошлого проекта?
Или, подозреваю, вы не в курсе, есть автоматические генераторы кода, которые очень сильно ускоряют процесс написания. Для добавления опций я использую вот такой сайт (к слову, он с опечаткой генерирует): wpsettingsapi.jeroensormani.com
через него добавление опций займет 5 минут, но, раз я все "сроки" выдаю с запасом, то так же как и в прочих этапах - 10-15 минут.
>крона нет, а с ним как раз предостаточно нюансов
Какие 2 часа?
Кажется, начинаю повторяться. Тут так же два варианта - скопипастить с прошлого, или использовать генератор (https://generatewp.com/schedule_event/).
Для нормальной работы плагина нужно две задачи:
одна для перевода, функция уже есть ( os_get_post_to_translate() )
и еще одна для сборки мусора (нужно раз в сутки запускать функцию, которая будет брать посты с мета полем _ya_translated==0 и удалять это мета поле).
Вы 2 часа собрались писать стандартный луп через стандартную же WP_Query?
Хотя более оптимально по производительности будет напрямую к базе через $wpdb одним запросом удалить эти метаполя - что тоже никак не может 2 часа занять, 10-15 минут.
>переводите только тело поста, нет ни заголовка, ни мета. Не совместимо ни с одним плагином
А этого не было в ТЗ) Поэтому не факт, что что-то из этого хотел заказчик.
Но, если добавлять - склеить все мета поля и заголовок в один блок текста, с разделителями в виде чего-то такого заголовокзначение поляfield_name1>значение поляfield_name2> и отправить на перевод одним запросом легко.
Чуть сложнее будет разлепить это обратно, если не уметь пользоваться регулярками. Поэтому 15-30 минут.
>код работает только с постами, не работает со страницами custom post type
Добавляем в опции блок с галками, выбираем то, с чем работать. Про добавление опций уже писал.
>код не работает с taxonomies - и встроенными, и кастомными.
хотите научу вас как брать в WordPress все таксономии) используя хоть стандартную функцию или напрямую через $wpdb?
взять таксономии, сложить их заголовок, описание и мета поля в один блок по аналогии мета полями у постов. Добавить в крон задачу на запрос перевода этого раз в сутки или раз в неделю.
20-30 минут
>код побъет кучу лишнего - например shortcodes
сейчас да, с shortcodes будет проблема. Про это у вас и спрашивал, нет ли там каких-то подводных камней?
Исправить можно. Навскидку:
global $shortcode_tags;
с полученного массива имеем активные шорткоды,
в тексте меняем все [shortcode] на ,
если этого не достаточно (а скорее всего так и будет), смотрим сюда https://codex.wordpress.org/Function_Reference/get...
по аналогии с этим кодом меняем [shortcode attr="" ]text[/shortcode] на text
После получения перевода делаем обратное переименование.
Максимум 30 минут.
>запросы кешировать можно, но в данном случае необязательно
Как раз в данном случае - обязательно)
Запрос на проверку языковых пар можно делать раз в неделю, а то и реже. Делать этот запрос каждый раз при переводе - лишнее.
>нет никакой валидации данных
Вот как раз отсутствие валидации и можно считать серьезной ошибкой. Остальное - ерунда.
Но, если добавить, wp_kses_post для wp_update_post, количество строк больше 900 не станет)
Вы, кстати, на некоторые другие другие критичные вещи внимание не обратили. Вроде: никак не обыгрывается вариант, если редактор изменил тело поста после того, как он был переведен, и тп. Но, опять же, этого не было в "ТЗ")
>ваш WP_Query берет крайний пост, очень грубая работа, чревато косяки и перезаписью данных из другого поста
Не вижу проблемы.
Я взял крайний пост без мета поля. Затем в лупе я обращаюсь к этому же посту по ID.
Если во время работы скрипта этот пост удалят, в другой пост записать ничего не смогу - ID использую тот же.
Оценивал в 1-2 часа
Затратил 1 час, еще нужно +1-2 часа.
Итого: 2-3 часа.
За начальный бюджет выйду на 1 час, который нужен на добавление изначально не планируемого функционала - добавление перевода мета полей и таксономий, добавление страницы опций и тп.
>А без этих правок - это голый прототип, а не готовая работа.
Без этих правок это уже вполне работоспособный кусок кода. Без окошечек/рюшечек, сделанный под конкретную задачу.
Заказчик может поправить код ручками (вписать ключ, типы постов), поставить на свой сайт, и он будет работать и зарабатывать деньги на дальнейшее расширение функционала.
Как говориться, пока в Вииларибо документируют код, в Вилабаджо идут на ipo)
Если этот код делать как отдельный плагин, на продажу, то тут работы будет еще на неделю минимум. Но к программированию оно может не особо относится, что-то вроде поднять демо сайт, нарисовать красивых картинок, сделать видео, написать тексты и тп.
>Ишь как пригорело))
надеюсь, смог убедить, что ваш ответ "никак" таки совсем не правильный?)
Игорь Воротнёв: улучшений там можно еще много делать.
к примеру, можно тот же запрос пар перевода кэшировать. Будет чуть быстрее работать.
Можно вынести кнопку в админку, на страницу редактирвоания поста, чтоб можно было прям сразу автоматический перевод получать и тд и тп.
Но если и эти правки делать, то тогда я бы как вы, не смог бы уложится в заявленный бюджет/сроки)
Игорь Воротнёв: Контрибьютор - это тот человек, который есть в списке "внесших полезный вклад". Все остальное - холиварное семантическое задротство. Вас в списке нет.
Дальше по этому пункту спорить смысла не имеет.
>Нет там никакой оплаты вообще.
оплаты нет, но код есть. https://github.com/qTranslate-Team/qtranslate-x/bl...
код для подтверждения заказа есть, небольшая логика под обработку заказов так же есть.
Даже если не смотреть сам код, вас текст "Order successfully sent", "No open orders" и тп не смущает? Ну явно жеж это все для нашего случая будет лишним.
Из "ограничений":
работать будет только для 2х языков (добавить для нескольких можно - разные метаполя под каждый язык, чтоб поправить 10-15 минут, 5-10 строк),
функции не документировал (в "вашем" плагине основная масса кода вообще без документации),
не добавил функцию для добавления задач в крон (это 10-15 минут, 5-10 строк),
учитывая, что вы негативно настроены к крону, это можно считать не недоделкой, а фичей - текущая реализация будет работать, если добавить задачу в крон сервера (нужно будет дергать site/wp-admin/admin-ajax.php?action=text),
нет страницы с опциями (править ключ нужно ручками, типы постов так же руками в коде, если добавить страницу с опциями - 10-15 минут, 20-60 строк),
перевожу только тело поста, заголовки не трогаю (10 минут, 10-20 строк),
не запрещаю публикацию постов с одним языком (10-15 минут, 10-20 строк).
ну и использовал не гугл, а яндекс. он бесплатный.
ключ сейчас деактивировал. для тестов нужно будет свой делать.
Собсно, как я и писал - 1-2 часа. Сейчас код рабочий, использовать можно.
Добавить правки займет около часа и количество строк все равно не сильно приблизится к 900.
На мой взгляд, если у вас по задачам итоговое время всегда и в несколько раз превышает предварительную оценку, вы что-то делаете не так.
Игорь Воротнёв:
>1. Contributor - это не только тот, кто код контрибьютит.
ну, я тогда контрибьютор виндов, фаерфокса, скайпа и еще кучи программ, к которым я отправлял отчеты о падениях. По вашей логике так правильно получается?
>2. Translation Service в qTranslate X - это старый, унаследованный от оригинального qTranslate сервис
ну ок, не буду спорить. Вполне возможно, что по этому пункту не прав.
Хотя по ссылке, что вы дали, написано "We would like to figure out if we need to remove this feature or to keep it alive". Получается сейчас они пока сами не решили, убрать перевод или нет. Я к этому плагину отношения никакого не имею, мог ошибиться.
>3. И, наконец, последнее. Внимательно изучите те ~900 строк кода
Зачем?
У человека, который задал вопрос, совсем другая задача. Ему нужно, чтоб текст автоматически переводился.
Не нужна оплата, подтверждение заказов и тп. Ну никак не будет там 900 строк.
Убедили. Сейчас, напишу основное, посчитаю и время и объем кода
>объясняю как contributor данного плагина - он не может переводить за вас, и данный функционал не планируется.
на гитхабе в версии 3.4.8 уже есть возможность перевода через их сервис (платно). https://github.com/qTranslate-Team/qtranslate-x/bl...
то есть, функционал для автоматического перевода планируется и уже есть.
По этому и уточняю, действительно ли вы один из контрибьюторов? Если да, то, по идее, должны быть в курсе.
>Я не говорю, что этого нельзя сделать. Можно.
Ну так теперь, когда я алгоритм написал, конечно можно)
В самом начале вы более категорично настроены были.
Игорь Воротнёв: думаю, у вас тот случай, когда от больших знаний большие проблемы)
>И первый из них - это крон.
не проблема.
если на сайте есть кэширование или он редко посещаем, отрубаем крон движка, добавляем задачу в крон сервера (туториалов, как это сделать, куча).
перед отправкой поста добавляем ему мета поле "_working", после получения и сохранения перевода поле удаляем.
посты с этим мета полем не трогаем.
(или трогаем, но раз в сутки и другой задачей - считаем, что ответа от сервиса по ним не дождались и нужно их перепроверять. Другая задача будет раз в сутки удалять все эти мета поля).
забываем про race conditions.
>АПИшка гугла имеет лимиты по запросам
тупо посчитать, какой лимит в сутки, и сделать соответствующее количество задач
условно - допустим гугл разрешает 100 запросов в сутки
60/15 * 24 = 96 - выполняя задачу раз в 15 минут, мы будем делать 96 запросов
Соответственно, переводить 96 постов в сутки. Если недостаточно, можно склеивать несколько постов в 1 запрос.
>По хорошему, надо его делать драфтом, и менять статус на publish только после успешного осуществления перевода (по крону). Это дополнительная логика
На самом деле зависит от желания заказчика - может его устроит, что записи без перевода будут сразу публиковаться (плюс в настройках плагина есть опция - можно показывать табличку, что пост еще не переведен).
но если нужно, то как-то так:
вешаем функцию на изменение статуса поста.
если у поста есть мета поле "_checked", разрешаем смену статуса на опубликовано.
если нет, сохраняем обратно как черновик.
Ну ок, не час, с всеми этими правками выйдет в 2 часа. И будет нормально и стабильно работать.
Не так важно.
Посмотрел список контрибьютеров плагина (интересно было посмотреть, какие вы правки делали ну и на уровень кода, раз уж у вас ставка больше), ни на гитхабе ни в репозитории WordPress среди разработчиков плагина вас нет. Вы там под другим ником или почему-то вас забыли упомянуть?