• Кто должен делать сайт по прототипам — дизайнер или верстальщик?

    AlexBrWEs
    @AlexBrWEs
    Sport Press
    Фронт прав.
    Это два очень разных направления работы.
    1.Веб-диз делает диз.
    2.Фронт по этому дизу кроит верстку.

    Редко, когда фронт хориший диз, еще реже когда диз вообще верстает)).
    Ответ написан
    Комментировать
  • Можно ли хранить sitemap.xml в подпапках домена?

    rc-dm
    @rc-dm
    Full-Stack Web Developer
    Ты можешь указать в robots.txt где лежит твой sitemap.
    Кроме того, sitemap может быть несколько.

    Пример robots.txt с указанием адреса sitemap.xml
    User-agent: *
    Allow: /
    Sitemap: https://site.ru/sitemap.xml
    Sitemap: https://site.ru/moscow/sitemap.xml


    Поисковик работает только с одним robots.txt, находящимся в корне сайта
    (https://example.com/robots.txt)

    Какие существуют требования к robots.txt:
    • Размер файла не превышает 500 КБ
    • Это TXT-файл с названием robots.txt
    • Файл должен быть размещен в корневом каталоге сайта
    • Файл должен быть доступен для роботов — сервер, на котором размещен сайт, отвечает HTTP-кодом со статусом 200 OK
    • Можно указать до 500 штук файлов sitemap.xml, до 50 000 ссылок в каждом из них


    Какие существуют требования к sitemap.xml:
    • Файл должен быть в кодировке UTF-8
    • Максимальное количество ссылок — 50 000 (О том как разделить большой sitemap.xml написано выше)
    • Максимальный размер файла в несжатом виде — 50 МБ
    • Указывайте ссылки на страницы только того домена, на котором будет расположен файл
    • Разместите файл на том же домене, что и сайт, для которого он составлен
    • При обращении к файлу сервер должен возвращать HTTP-код 200
    Ответ написан
    5 комментариев
  • Возможно ли сделать навигацию по заголовкам записи в wordpress?

    @UmniyParen Автор вопроса
    Плагин "Table of Contents Plus", автоматически генерирует то что нужно
    Ответ написан
    Комментировать
  • Как слделать не обновляймы header.рhp при переходе по ссылке?

    IIIu6ko
    @IIIu6ko
    Я делал с помощью https://barbajs.org/
    Называется всё это дело PJAX.

    Можно как с анимацией, так и без. Погуглите что-то в духе "wp pjax".
    Ответ написан
    4 комментария
  • Почему wp_upload_dir обрезает названия папок с символами?

    Immortal_pony
    @Immortal_pony
    Первый параметр, который принимает wp_upload_dir() это $time, а возвращает он всегда массив.
    Что ты пытаешься сделать вообще?

    Пальцем в небо, тебе нужна папка для каждого чата? Ну тогда как-то так можно сделать:
    function findOrCreateChatDir(string $chatId): string {
        $uploadDir = wp_upload_dir();
        $chatDir = "{$uploadDir['path']}/chat/{$chatId}";
        if (!file_exists($chatDir)) {
            wp_mkdir_p($chatDir);
        }
    
        return $chatDir;
    }
    Ответ написан
    1 комментарий
  • Как добавить динамическую страницу?

    @SkyMass
    Добрый день. Если сервисы у вас это обычные страницы на элементоре, то наверное никак. А я так понимаю, что так и есть. Иначе вы бы не задавали тут такой вопрос.

    Вообще путь был бы правильным наверное такой:
    Создаете новый тип поста, например service
    Создаете файл single-service.php и в нем делаете шаблон для всех сервисов. Будет один файл отвечать за все сервисы.
    Ответ написан
    Комментировать
  • Фильтр товаров wordress ( НЕ woo)?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    greencost, Если через ajax + metaquery, то будет как-то так:
    Все фильтры завернуты в форму и представляют собой элементы формы: селекты, радиокнопки, чекбоксы. У элементов форм есть name. Обязательно должно быть скрытое поле с названием функции
    <form id="filter">
      <div class="search-holder">
        <input type="search" name="s" id="s" class="input-text" placeholder="<?php esc_attr_e( 'Поиск вакансий' ); ?>" value="<?php echo get_search_query(); ?>">
    
        <?php
        $terms_loaction = get_terms(
          array(
            'taxonomy' => 'location',
            'hide_empty' => false,
          )
        );
        ?>
    
        <?php
        if ( $terms_loaction ) :
          ?>
          <select name="city" class="select-block mobile-hide">
            <option value=""><?php esc_html_e( 'Город' ); ?></option>
            <?php
            foreach ( $terms_loaction as $location ) :
              ?>
              <option value="<?php echo esc_attr( $location->term_id ); ?>"><?php echo esc_html( $location->name ); ?></option>
            <?php endforeach; ?>
          </select>
        <?php endif; ?>
    
        <ul class="filter-list mobile-hide">
          <li>
            <label class="checkbox-block">
              <input type="checkbox" name="is_free_live">
              <span><?php esc_html_e( 'Бесплатное проживание' ); ?></span>
            </label>
          </li>
          ...
        </ul>
        <button type="submit" class="ajax-filter-btn btn"><?php esc_html_e( 'Найти вакансию' ); ?></button>
      </div>
      <input type="hidden" name="action" value="filter_vacancy">
    </form>


    php обработчик будет выглядеть как-то так:
    add_action( 'wp_enqueue_scripts', function() {
    
      $my_args = array(
        'post_type' => 'offers',
        'posts_per_page' => -1,
        'tax_query' => array(
          'relation' => 'AND',
        ),
        'meta_query' => array(
          'relation' => 'AND',
        ),
      );
    
      $my_query = new WP_Query( $my_args );
    
      wp_register_script('ajax_js', get_stylesheet_directory_uri() . '/js/ajax.js', array('jquery'), time(), true);
    
      wp_localize_script( 'ajax_js', 'ajax_obj', array(
        'ajaxurl' => admin_url('admin-ajax.php'),
        'posts' => json_encode( $my_query->query_vars ),
        'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,
        'max_page' => $my_query->max_num_pages,
      ) );
    
      wp_enqueue_script('ajax_js');
    });
    
    // FILTER
    function filter_vacancy(){
    
      $args = array(
        'post_type' => 'offers',
        'posts_per_page' => -1,
        'tax_query' => array(
          'relation' => 'AND',
        ),
        'meta_query' => array(
          'relation' => 'AND',
        ),
      );
    
      if( !empty( $_POST['city'] ) && $_POST['city'] ) {
        $args['tax_query'][] = array(
          'taxonomy' => 'location',
          'field' => 'id',
          'terms' => $_POST['city'],
        );
      }
    
      if( isset( $_POST['is_free_equipment'] ) && $_POST['is_free_equipment'] ) {
        array_push($args['meta_query'][] = array(
            'key'         => 'is_free_equipment',
            'value'       => true,
            'compare'     => '=',
          )
        );
      }
    
      if( !empty( $_POST['s'] ) ) {
        $args['s'] = sanitize_text_field($_POST['s']);
      }
    
      query_posts( $args );
    
      global $wp_query;
    
      if ( have_posts() ) :
        ob_start();
    
        while ( have_posts() ) :
          the_post();
          get_template_part( 'template-parts/offers/offers', 'list' );
        endwhile;
        $response = ob_get_contents();
        ob_end_clean(); 
      else:
        $response = 'По запросу нет вакансий';
      endif;
    
      echo json_encode( array(
        'posts'       => json_encode( $wp_query->query_vars ),
        'max_page'    => $wp_query->max_num_pages,
        'found_posts' => $wp_query->found_posts,
        'content'     => $response,
      ) );
      die();
    }
    add_action('wp_ajax_filter_vacancy', 'filter_vacancy');
    add_action('wp_ajax_nopriv_filter_vacancy', 'filter_vacancy');


    ajax обработчик в упрощенном виде както так
    $('#filter').on('submit', function (e) {
      e.preventDefault();
      var filter = $(this);
      $.ajax({
        type: 'POST',
        url: ajax_obj.ajaxurl,
        data: filter.serialize(),
        dataType : 'json',
        beforeSend: function(xhr){
    
        },
        success: function (data) {
          $('.offers-list').html(data.content);
          ajax_obj.posts = data.posts;
        },
      });
    });
    Ответ написан
    Комментировать
  • Как не дать скопировать свой сайт на wordpress?

    hahenty
    @hahenty
    ('•')
    Есть вариант делать потоковую отрисовку с обратной связью для управления. На сайте только видео-контейнер и скрипт для него, типа webrtc, а на сервере отрисовка страницы с учётом передаваемых клиентом команд. Такое google-stadia для web-страниц.
    Ответ написан
    2 комментария
  • Как не дать скопировать свой сайт на wordpress?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Используйте современные технологии:
    Scss
    обфускаторы кода
    страйперы для вырезки комментов
    Системы автоматического развертывания. То есть вы работаете с чистым кодом, а потом после развертывания это превращается в кашу.
    Заложите бомбу в ваши скрипты. Логика простая если нет куки или локал стораджа, то показывается баннер "Этот человек мошенник и воришка". Или привяжите этот код к имени домена.

    В общем ваша задача максимально усложнить жизнь реверсеру.
    Ответ написан
    Комментировать
  • Как не дать скопировать свой сайт на wordpress?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Любой, кто озаботится вашим сайтом, тупо придет сюда на Тостер, и ему на блюдечке все расскажут и покажут.
    Здесь много таких любителей дармовщинки.
    Ответ написан
    2 комментария
  • Где взять id города в openweathermap?

    @bondarenkoIlya
    621344ae9ee45506526442.png
    Ответ написан
    Комментировать
  • Какой фреймворк выбрать для моей задачи (пример сайта в вопросе)?

    vabka
    @vabka Куратор тега Веб-разработка
    Токсичный шарпист
    Подобные веб-приложения называются SPA (single page application).
    Такие сейчас, в основном, делают при помощи одного из: Angular, React, Svelte, Vue. (Самые популярные - Angular и React. Самый наименее популярный - Svelte.)

    В принципе, такое ты можешь сделать при помощи любой технологии - даже при помощи jquery, или вообще без сторонних библиотек.
    Не уверен правда, сколько ты времени на это потратишь.
    С другой стороны, если ты гениален, но плохо изучаешь новые вещи - может быть тебе проще будет навелосипедить всё с нуля.
    Ответ написан
    Комментировать
  • Не работает псевдокласс hover на иконночном шрифте. Как это исправить?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Потому что вот так:
    .icon-facebook:hover::before{
      color: red;
    }


    Либо:
    .icon-facebook {
      color: #ccc;
    }
    .icon-facebook::before {
      content: "\e900";
    }
    .icon-facebook:hover{
      color: red;
    }
    Ответ написан
    1 комментарий
  • Как устроен принцип работы пагинации?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Пагинация делается в связке - бэкенд высчитывает нужный кусок контента, исходя из длинны контента на страницу и номера страницы соответственно. Номер страницы передается в параметрах запроса (собственно ссылке из блока пагинации). Фронтенд - обычно хтмл блок, построенный с помощью цикла на языке бэкенда (например пхп), отображает в браузере соответствующие ссылки, исходя из общей длинны контента, и деля его на размер контента на одну страницу. Можно его построить и на яваскрипте, но данные для построения (текущая страница, всего страниц) передается с бэкенда, так как там хранится выбранная информация.

    В редких случаях используют "фиктивную" пагинацию на js, то есть весь контент загружают как список с бэкенда, а на фронте делят его на куски, и по нажатию показывают кусок соответствующий номеру страницы.
    Ответ написан
    5 комментариев
  • Как стилизовать recaptcha v2?

    vabka
    @vabka
    Токсичный шарпист
    recaptcha подключается через iframe.
    Естественно, стили на твоём сайте не могут влиять на страницы, которые открываются в iframe.

    Так что стилизовать никак нельзя, да и не нужно.
    Ответ написан
    3 комментария
  • Binance может блокировать счета пользователей находящихся в стране с военными действиями?

    vabka
    @vabka
    Токсичный шарпист
    Если напрямую какая-нибудь условная Америка не скажет "мы запрещаем работать компаниям, которые работают на территории X, тк у нас санкции против них", то Binance врядли станет по собственной воле прекращать работу в каком-то регионе.

    Не уверен, но по такому принципу Binance вполне может не работать на территории Северной кореи, Ирана, и в Крыму (ну и ещё в нескольких странах)
    Ответ написан
    Комментировать
  • Как сделать несколько фонов друг за другом?

    LenovoId
    @LenovoId
    svg, css,js
    Не моё



    FullScreen: https://codepen.io/naomi27/full/wWyqPa

    И кстати если по клаве лень долбить: cuda psd
    Ответ написан
    1 комментарий
  • Кто должен адаптировать сайт под разные разрешения мониторов?

    @Akela_wolf
    Extreme Programmer
    Странный дизайн и странный верстальщик. У того же Bootstrap максимальная ширина контейнера для XXL размера - 1320 пикселей. То есть на типичном сегодня FullHD (1920х1080) он занимает центральную часть экрана, оставляя поля слева-справа. Аналогично здесь, на тостере - содержимое ограничено шириной 1440 пикселей.

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

    Теперь о том кто должен адаптировать макет к меньшему разрешению. Зависит от того что именно должно меняться. Если там просто уменьшение ширины колонок - это одно, это может сделать и верстальщик, если вы ему четко поставите задачу что и как должно измениться. Если же там начинаются более сложные вещи, например, "вот этот блок на небольших экранах показываем не здесь, а здесь", "вот эти блоки должны быть не рядом, а друг под другом", "этот блок вообще скрываем, отображаем если пользователь нажмет на кнопку" - то это, конечно, требует полноценного макета и разрабатывать его должен дизайнер.
    Ответ написан
    3 комментария