Ответы пользователя по тегу WordPress
  • Как грамотно построить и организовать сетку сайтов?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Если общими словами, то wpms, а для детального ответа не хватает данных. Я бы отказался от cms и посмотрел бы в сторону cmf. Например, yii2, symfony, laravel.
    Ответ написан
  • Contact form 7 как получить заголовок поста, [_post_title]?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Странно, что не работает.
    А так можно средствами JS получить содержимое тега и вставить в нужное поле...
    Ответ написан
    Комментировать
  • Почему при переходе на ссылку подкатегории получаю 404 ошибку?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    1) Обновите постоянные ссылки - Настройки - Постоянные ссылки - Обновить
    2) существует ли подрубрика? И есть ли записи в ней
    Ответ написан
    Комментировать
  • Как убрать фото из индексации wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    нужно отредактировать файл robots.txt
    если хотите убрать конкретное фото, то используйте
    User-agent: *
    Disallow: /wp-content/uploads/myphoto.png

    если нужно убрать все фотографии из библиотеки, то используйте:
    User-agent: *
    Disallow: /wp-content/uploads/*.png*
    Disallow: /wp-content/uploads/*.jpg*
    Disallow: /wp-content/uploads/*.jpeg*
    Disallow: /wp-content/uploads/*.gif*
    Disallow: /wp-content/uploads/*.tiff*
    Disallow: /wp-content/uploads/*.bmp*
    Ответ написан
    5 комментариев
  • Где редактировать последние комментарии WORDPRESS?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Ищите шаблон comments.php в папке вашей темы.
    Для вывода даты, согласно грамматике русского языка, используйте:
    www.wordpressplugins.ru/critical/russian-date.html

    А еще не забудьте глянуть файлы перевода на наличие переводимых строк. Ищите папку languages в вашей теме, а именно файлы pot, po, mo. (не факт, что они есть). А для редактирования используйте программу PoEdit или плагин locoTranslate
    Ответ написан
  • Почему блоки наезжают друг на друга в теме wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Это довольно известная тема от египетского разработчика (если не ошибаюсь). Он же разработал такие темы, как jarida, sahifa.
    Если быть вкратце, то суть в том, что верхний виджет обладает св-вом fixed и соответственно, при скролле накладывается на нижележащие виджеты.
    Возможные варианты решения:
    1) правильнее было бы fixed виджеты выводить после обычных виджетов. Тогда будет довольно хороший эстетический эффект.
    2) не совсем правильный метод, но можно назначить fixed виджету больший z-index. Тогда при наезжании на обычный виджет, чуть лучше будет смотреться.
    что-то типа такого:
    .theiaStickySidebar {
    z-index:9999 !important;
    background:#ffffff !important;
    }

    хотя, это не самое лучшее решение.
    3) либо просто поменять fixed виджет на обычный.

    Как по мне, самым адекватным является первый вариант.
    Ответ написан
  • Как сделать фильтр по категориям в wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Попробуйте плагин essential grid, он выводит сетку с записями по категориям. И соответствено, при клике на категорию по аяксу он сортирует записи и есть ф-ция подгрузки новых записей по аяксу
    Ответ написан
    Комментировать
  • Фильтр цены для WooCommerce?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Не могу поделиться ссылками на сторонние ресурсы, ибо они не хочу нарушать правила сайта Тостер, но если вы погуглите, то найдете много сайтов, где можно скачать обнуленные версии всех премиум плагинов. Есть сайт, где вы можете купить обнуленную версию плагина за 250 руб.
    А так из всех фильтров, с которыми мне доводилось работать рекомендую плагин от dzeriho
    https://codecanyon.net/item/woocommerce-product-fi...

    Ищите его nulled версию. В интернете полно
    Ответ написан
  • Возможно ли реализовать с помощью вордпресса?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    А в чем собственно говоря, заключается проблема?
    В том, как реализовать или можно ли реализовать это на ВП вообще?
    ВП это cms система и вы можете реализовать на нем все, что угодно.
    Другой вопрос как именно реализовать...
    1) Установите ВП в режиме wpms (мультисайт). Далее создайте субдомены для нужных стран: ru.example.com en.example.com. (или можно устанавливать в разные каталоги... example.com/en example.com/ru). Можно обойтись и без мультисайта.. а просто создав разные страницы с соответствующими слагами /en /ru
    2)Далее вам нужно реализовать функционал добавления карточки банка. Для этого создайте кастомный тип записи и таксономию для нее.
    3) добавьте кастомные поля для записей при помощи acf pro. Например, сумма, срок и т.д.
    4) Создайте аякс фильтрацию для "фильтрации, сортировки" записей по нужным кастомным полям.
    Готово.
    Ответ написан
    Комментировать
  • В меню wordpress нет переносов?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Не уверен, что это сработает, но попробуйте в месте переноса добавить тег <br>
    Ответ написан
    1 комментарий
  • Каким плагином можно отключить скрипты на определенных страницах?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    1) как вы отметили - плагин Clearfy
    2) установите плагин query monitor. Найдите handle нужных скриптов и стилей, а далее выполните deregister_script(). Чтобы отключать на конкретных страницах используйте условные теги. Например, для главной: is_front_page()
    Ответ написан
    Комментировать
  • Как сделать такой фильтр?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Довольно нелпохой ресурс для реализации того, что вы хотите:
    https://www.smashingmagazine.com/2016/03/advanced-...

    Возможно, что есть готовые плагины... Например, для вукомерца есть плагин для фильтрации
    https://ru.wordpress.org/plugins/woocommerce-produ...
    https://ru.wordpress.org/plugins/yith-woocommerce-...
    Ответ написан
    Комментировать
  • Как добавить класс к ссылке, на которую перешел?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Если вы используете кастомное меню без ВП и РНР, то обрабатывать добавление класса надо на клиентской стороне. Соответственно, нужно написать js скрипт.
    Ответ написан
    Комментировать
  • Какой функцией Wordpress проверяет существование пользоаттеля?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Вы можете использовать условные теги ВП для проверки юзера.
    Например:
    email_exists( $email )
    username_exists( $username )
    https://codex.wordpress.org/Conditional_Tags#Email...
    Ответ написан
    Комментировать
  • Как создать опции для кастомного поста?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    1) Создаете нужную таксономию для рубрик и кастомный тип записи для записей.
    2) Далее установите плагин ACF Pro и создайте шаблон и группу полей с нужными вам полями для кастомного типа записи.
    3) Используйте acf_form() для того, чтобы вывести форму на сайте.
    При отправке формы записи будут попадать в админку (можно настроить статус, чтобы они публиковались со статусом "черновик"). Также можно добавить wpmail() чтобы получать уведомления при наличии новой заявки.
    https://www.advancedcustomfields.com/resources/usi...
    https://www.advancedcustomfields.com/resources/acf...
    Ответ написан
    Комментировать
  • Woocommerce: Как создать боковое меню навигации с товарами?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    По сути вам нужно вывести 2 цикла. (цикл в цикле). Первый цикл будет получать термины таксономии (категории), а второй цикл будет получать товары для этой таксономии.
    Например, если нужно вывести рубрики и все их товары, то можно использовать следующий код:
    https://gist.github.com/DevinWalker/6fb2783c05b46a...

    https://stackoverflow.com/questions/1780386/loopin...

    Адаптируйте код под себя.
    Ответ написан
    1 комментарий
  • Как оптимизировать мой код по выводу zip файлов на страницы wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Вас беспокоит, что zip архивы будут скапливаться или то, что файлы, которые были добавлены в архив не удаляются из библиотеки?
    Один из моих знакомых разработчиков написал небольшой скрипт для возможности на стороне сервера создавать архивы в библиотеке из выбранных файлов. И если мне память не изменяет, то там есть возможность удаления файлов, которые были включены в архив.

    Вот код:
    add_action("pre-plupload-upload-ui", "appendZipWrapper2UploadUI");
    add_action("wp_ajax_createZIP", "createZipArchive");
    add_action("wp_ajax_nopriv_createZIP", "createZipArchive");
    
    function createZipArchive()
    { 
      global $wpdb; 
      $wpdb->show_errors();
    
      $isRemoveSrcNedded = true;
    
      $postTable = $wpdb->get_blog_prefix()."posts";
      $fileList = json_decode(preg_replace("#\\\\\"#", "\"", $_POST["fileList"]), true);  
    
      $parentPostID = get_posts
      (
        array
        (
          "post_type" => "attachment",
          "include" => $fileList[0] 
        )
      )[0]->post_parent;  
    
      $sqlQuery = "SELECT guid FROM ".$postTable." WHERE id IN (".implode(", ", $fileList).")";
      
      $queryResult = $wpdb->get_results($sqlQuery);
    
      $zipFileName = 
        "/tdoc".(new DateTime("", new DateTimeZone("Europe/Minsk")))->format("_Ymd_His").".zip";
       
      $path2Archive = wp_upload_dir()["path"].$zipFileName;
    
      $zip = new ZipArchive();
      $zip->open($path2Archive, ZipArchive::CREATE);  
      
      foreach($queryResult as $row)
      {   
        $path2File = $_SERVER["DOCUMENT_ROOT"].wp_make_link_relative($row->guid);   
        if(file_exists($path2File))
        {     
          $zip->addFile($path2File, basename($path2File));
        }
      }
    
      $result = $zip->close();
    
      $filetype = wp_check_filetype(basename($path2Archive), null);
      $wp_upload_dir = wp_upload_dir();
      $attachment = array(
        'guid'           => $wp_upload_dir['url'] . '/' . basename($path2Archive), 
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename($path2Archive)),
        'post_content'   => '',
        'post_status'    => 'inherit'
      );
      $attach_id = wp_insert_attachment($attachment, $path2Archive, $parentPostID);
      $attach_data = wp_generate_attachment_metadata($attach_id, $path2Archive);
      wp_update_attachment_metadata($attach_id, $attach_data);
    
      if($isRemoveSrcNedded)
      {
        foreach($fileList as $currentAttacment)
        {
          wp_delete_attachment(intval($currentAttacment));          
        } 
        // file_put_contents(__DIR__."/item2del.txt", json_encode())
      }
    
      echo json_encode(["status" => $result, "filename" => basename($path2Archive)]);
      die();
    }
    
    function appendZipWrapper2UploadUI() 
    {
        // if(!current_user_can("upload_files")){return}; 
      echo "
      <style>
      #waitImage
      {
        position: fixed;
        left: calc(50% - 64px);
        width: 128px;
        height: 16px;
        background-image: url(".get_template_directory_uri()."/images/waitImage.gif);
        top: calc(50% - 7px);
        z-index: 999999999999;
        display: none;
      }
      </style>
      <script>
      var zipManagerWrapper = '<button ' +
        'id=\"createZipBundle\" ' + 
        'style=\"margin-top:11px;margin-right:10px;width:100%;padding-left:2px;padding-right:2px;}\"' +
        'class=\"button button-primary\">Архивировать</button>' +
        '<div id=\"waitImage\"></div>',
        captionWrapper = document.querySelectorAll('.media-frame .media-toolbar:nth-child(1) .media-toolbar-secondary'),
        MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver,
        contentObserver = new MutationObserver(function(mutations)
        {
          mutations.forEach(function(mutation)
          { 
            if((mutation.type == 'childList') && (mutation.addedNodes.length != 0))
            {
              mutation.addedNodes.forEach(function(nodeItem)
              {
                if(nodeItem.childNodes)
                {
                  nodeItem.childNodes.forEach(function(childItem)
                  {
                    if((childItem.nodeName == 'DIV') && (childItem.innerText.trim() == archiveName))
                    {
                      // console.log(nodeItem.dataset.id);  
                      waitImage.style.display = 'none';
                      contentObserver.disconnect();
                      jQuery('li[data-id=\"' + nodeItem.dataset.id + '\"] .thumbnail').trigger('click');
                    }
                  });
                }         
              });       
            }     
          });
        }),
        observerOption = {childList: true, characterData: true, subtree: true, attributes: true};
      var waitImage,
        archiveName;
      
      if(captionWrapper.length == 1)
      { 
        var isItemExists = 
          document.querySelectorAll('#createZipBundle').length == 0 ? false : true;
        if(!isItemExists) 
        {
          captionWrapper[0].innerHTML = zipManagerWrapper + captionWrapper[0].innerHTML;    
          waitImage = document.getElementById('waitImage'); 
          jQuery('#createZipBundle').unbind();
          jQuery('#createZipBundle').bind('click', createZipBundleHandle);
        }   
      } 
    
      function createZipBundleHandle(event) 
      {
        event.preventDefault();
        var files2Zip = Array.prototype.filter.call
        (         
          captionWrapper[0].parentElement.parentElement
            .previousElementSibling.querySelectorAll('li'),
          function(item)
          {
            return /selected/.test(item.classList.value);
          }
        ).map
        (
          function(item)
          {       
            return item.dataset.id;
          }
        );
        console.log(JSON.stringify(files2Zip));
    
        if(files2Zip.length > 0)
        {
          waitImage.style.display = 'block';
          jQuery.ajax
          ({
            url: ajaxurl,
            method: 'POST',
            data:
            {
              action: 'createZIP',
              fileList: JSON.stringify(files2Zip)
            },
            success: function(data){console.log('Ответ от сервера');displayResult(data);},
            error: function(error)
            {
              waitImage.style.display = 'none';
              console.log('Что-то пошло не так');
              console.log(error);
            }
          });
        }     
      }
      
      function displayResult(data)
      {
        var target = document.querySelectorAll('.media-modal.-select .media-modal-content .media-frame-content .attachments-browser ul')[0];
    
        data = JSON.parse(data);
        archiveName = data.filename;
        
        contentObserver.observe(target, observerOption); 
        // jQuery('#media-attachment-date-filters').trigger('change')
        wp.media.frame.state().get('library').props.set({ignore: (+ new Date())});
      }
      </script>";
    }


    Что касается cron, то тут можно поступить по разному. Можно использовать wp cron, а можно использовать cron. И конечно же это по сути скрипт, который нужно периодически запускать.
    Ответ написан
    Комментировать
  • Advanced Custom Fields. Как сделать что бы значение полей заданные на одной кастомной странице, отображались и на других без их повторного ввода?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    С учетом того, что футер, хедер и сайдбар являются "общими" областями, то логичнее было бы использовать acf_option.
    Создать пункт меню "Параметры темы" и выводить настройки в нужных местах через the_field || get_field добавляя 'option'

    А так, конечно же можно просто передать ID страница для которой вы выбрали отображение кастомных полей. Т.е. если вы загружаете их на главной, то в кастомные поля передайте id главной и соответственно, они будут доступны для других страниц
    Ответ написан
    Комментировать
  • Как исключить строка меню из цикла?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    для ответа на ваш вопрос, недостаточно информации...
    что подразумевается под "строкой меню". Код, который вы предоставили всего лишь стандартный цикл ВП, который выведет title & content.
    Ответ написан
  • Как грамотно перести сайт на английскую версию?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Лично я использую WPML и именно он доставил мне меньше хлопот. С PolyLang не знаком близко... А вот, плагины qtranslate, qtranslate-X & WPGlobus заставили напрячься) Постоянно баги, проблемы и т.д.(((
    Ответ написан
    Комментировать