Задать вопрос
Ответы пользователя по тегу WordPress
  • Где лежат файлы шапки в астре?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вы даже не предоставили ссылку на тему Astra. Или даже ссылку на гит проект этой темы...
    <?php astra_head_bottom(); ?>
    Это некая кастомная ф-ция, которая выводит шапку.
    Простой вариант - открыть тему в IDE (phpstorm) и посмотреть упоминания об этой ф-ции
    Или другой вариант произвести поиск по файлам темы. Например, через sublime text 3. (ctrl + shift + F) выбираете папку, пишете astra_head_bottom и смотрите, в каких файлах есть упоминание
    Ответ написан
  • На сайте уже есть меню, но нужно чтоб оно было вертикально, как сделать?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Прежде всего, огромное спасибо Ragtime Kitty за юмор))) Как говорится, какой вопрос, такой и ответ...
    А сейчас, если честно, то у вас на сайте сейчас горизонтальное меню и скорее всего по верстке вертикальное меню туда не подойдет.
    Что касается самого меню, то поверьте тут ВП ни причем. Скорее тут важна верстка. Соответственно, нужны знания html css js. Если вам сложно разбираться с этими языками и писать свой код, то можете попробовать готовые плагины или сниппеты кодов.
    Вот, вертикальное меню плагин - https://wordpress.org/plugins/bellows-accordion-menu
    Далее вы можете использовать Uber Menu. Универсальный плагин.

    Вот, готовые сниппеты - https://bootsnipp.com/search?q=vertical+menu
    Вот, еще примеры - https://freebiesupply.com/blog/css-menus/
    Правда, тут вам все-таки понадобятся знания кодинга, в частности Walker (смотрите WP Codex - Walker) + html + css + js
    Ответ написан
    Комментировать
  • Как добавить локализацию?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    но пока ничего не могу найти.

    а вы точно искали?

    если в гугл набрать wordpress multilanguage сразу найдете кучу вариантов.
    Например, плагин WPML, который поддерживает 3 вида ссылок- query parameter (?lang=en), субдомены (en.example.com) и субдиректории (example.com/en). Собственно говоря, то что вы хотите
    domain/ru/books
    domain/en/books
    domain/ko/books


    А также есть куча других плагинов wpml, qtranslate, qtranslate-x, polylang, wpglobus
    А также плагины для перевода pot po mo файлов. PoEdit (программа) или LocoTranslate (плагин)

    Также полезные ключевые слова для поиска - wordpress i18n, wordpress l10n, wordpress multilanguage, wordpress translation
    Ответ написан
  • Какой редактор кусков кода в записях Syntax Highlighter лучше использовать с Gutenberg?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Сам всегда использовал Enlighter и не имел дела с Gutenberg, хотя давно пора перейти на него.
    Вот, что написано в описании плагина enlighter -
    Full Gutenberg Editor Integration
    По факту, он должен полностью корректно работать с гутенбергом
    также нашел статью - https://wptavern.com/syntaxhighlighter-evolved-plu...
    Попробуйте этот плагин тоже 0 https://ru.wordpress.org/plugins/syntaxhighlighter/
    Ответ написан
  • Нужен плагин для WP, с рандомным выводом записей. Есть такой?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    исключая те которые человек прочитал.

    вряд ли вы найдете готовое решение...
    По идее, это надо хранить информацию (id прочитанных статей) статей для каждого пользователя на сервере. Соответственно, при формирвоании цикла исключать их из цикла и отдавать другие статьи
    Ответ написан
  • Нужно модальное окно для WordPress которое вставляется через шорткод?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    PopUp Maker
    Easy Modal
    Ответ написан
    Комментировать
  • Как экспортировать Google Calendar в формат XML (или получить ленту RSS)?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вот ссылка на оф. документацию - https://support.google.com/calendar/answer/37111?hl=ru
    Чтобы экспортировать - Нажимаете на шестеренку справа вверху, в открывшемся окне выбираете "Импорт и экспорт слева". Получаете архив с ics файлами.
    Вот, скрин
    5cf3b6221905e392570477.jpeg

    Я так понимаю, что они больше не поддерживают xml.

    Вот, конвертер в CSV формат -
    www.indigoblue.eu/ics2csv
    Источник - https://www.outsystems.com/forums/discussion/32758...

    Вот, универсальный конвертер -
    https://icsconvert.appspot.com/

    Что касается плагинов, то надо конечно проверить. Вот, список -
    https://ru.wordpress.org/plugins/tags/google-calendar/
    Ответ написан
  • Какой модуль доски объявлений использовать для CMS?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    С поддержкой регистрации аккаунтов (авторизация через соцсети и т.п.), системой рейтингов и т.п.

    Скорее всего это будет разный набор плагинов, а не один конкретный.

    Для начала посмотрите в стороны плагина и темы classipress. Для oauth можете использовать ulogin или ему подобные плагины. Регистрация есть по умолчанию в ВП
    Вот, еще один - https://awpcp.com
    Ответ написан
    Комментировать
  • Как удалить slug у custom post type?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    В месте регистрации CPT (в functions.php) посмотрите на пункт rewrite
    https://wp-kama.ru/function/register_post_type
    правила урлов для cpt задаются там
    Ответ написан
    Комментировать
  • Что нужно изучить?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    изучите html, css, js, jquery, wordpress codex, php, фреймворки, которые были использованы при создании вашей темы (redux framework и т.д.) и т.д.
    Ответ написан
    Комментировать
  • Как не редиректить js скрипты в wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    1) я бы рекомедовал вам избавиться от подобных плагинов. Они нагружают сайт.
    Достаточно установить плагин better search replace и произвести поиск / замену по БД с http на https. Ну и поменять на https в "настройки - общие"
    2)
    мою ссылку на js меняет на https, но мне нужно что бы оставалось http:

    изменяет потому, что у вас в плагине really simple ssl настроен редирект всех урлов на ssl. Скорее всего в настройках плагина есть возможность добавлять исключение
    3) учтите, что при загрузке скриптов без https, вы скорее всего столкнетесь с "загрузкой небезопасного контента..." (mixed content) и т.д.

    Обычно, в подобных плагинах бывает возможность выбрать уровень редиректа. например, редиректить контент, редиректить виджеты и т.д. Я раньше пару раз устанавливал wordpress https. Там есть возможность добавлять исключения. Что касается насчет really simple ssl, точно не скажу
    Ответ написан
    Комментировать
  • Как запретить авторам удалять и редактировать медиафайлы?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Этот плагин должен вам помочь. Помогает добавить / удалить роли группам пользователей или даже отдельным пользователям - https://ru.wordpress.org/plugins/user-role-editor/
    Ответ написан
    Комментировать
  • Как обновить Wordpress на 000webhost?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    здравствуйте!
    https://codex.wordpress.org/%D0%A7%D0%90%D0%92%D0%...
    добавьте в wp-config.php
    define('FS_METHOD', 'direct');

    Причина этой ошибки -
    - некооректный chmod для директории ВП
    - другой владелец апач и директории ВП
    - некорректные данные фтп
    Ответ написан
  • Почему если в TinyMCE выделить часть абзаца и выбрать Абзац, то WP виснет?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    не должно быть такого...
    - Обновите ВП
    - Обновите тему
    - Обновите плагины
    - Поочередно отключайте плагины для устранения возможного конфликта и проверяйте
    - Смените тему и проверьте

    и вообще, не должен никакой запрос убегать... у вас почему-то убегает запрос куда-то и соответственно, вы видите то, что на скрине... Также гляньте в консоли браузера (вкладка Сеть - Network) куда при клике убегает запрос.
    Ответ написан
  • Как создать мультимагазин на WordPress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    А вот, это пробовали?
    https://woomultistore.com/
    Ответ написан
    Комментировать
  • Как добавить class li элементам в меню wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    'add_li_class' => 'menu-item menu-blog',
    где вы такой аргумент увидели?

    https://wp-kama.ru/function/wp_nav_menu
    почитайте про walker
    https://codex.wordpress.org/Class_Reference/Walker

    Вот, еще одна полезная ссылка - https://stackoverflow.com/questions/14464505/how-t...
    Ответ написан
    Комментировать
  • Почему не могу сохранить в вордпрессе в редакторе страницу?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    У вас случайно плагин Clearfy не установлен? Там есть ф-ция отключения WP REST API
    Если установлен, то проверьте настройки и отключите эту функцию. Для корректной работы редактора gutenberg нужен rest api
    Ответ написан
    Комментировать
  • Как принимать оплаты на PayPal через сайт на WordPress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!

    Если мне память не изменяет, то для возможности принимать оплату paypal вам нужно иметь бизнес аккаунт. (обычный аккаунт не подойдет).

    Дальше стоит учесть следующим момент - какого рода оплату вы хотите принимать. Например, если вы продаете товар или услугу, то наверняка используете плагин Woocommerce. Соответственно, наберите в гугл Woocommerce Paypal Payment Gateway и найдете кучу плагинов. Установите и проверьте. Также обычно, требуется ввод токена и т.д.
    Вот, пример -
    https://ru.wordpress.org/plugins/woocommerce-paypa...
    https://woocommerce.com/products/woocommerce-gatew...

    Если у вас не интернет-магазин, то стоит посмотреть на плагины, которые умеют выставлять счет на имя пользователя для оплаты услуги.
    Вот, пример - https://wordpress.org/plugins/invoicing/

    Ну а если у вас какая-то узкоспециализированная задача, то возможно, стоит заказать разработку плагина (платежного шлюза PayPal)
    Ответ написан
    Комментировать
  • Как это реализовано?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Начнем с простого...
    1) у вас должны быть базовые знания по html, css, js, php, wordpress codex. Если у вас нет этих базовых знаний, то бесполезно дальше читать.

    Идем дальше...
    2) если вы хотите один в один сделать, то что на сайте, то как вариант можете проинспектировать блок и стянуть стили и скрипты.
    Для этого откройте консоль браузера (shift + ctrl + C) и найдите нужный в блок в DOM. Скопируйте структуру блока и стили.
    3) Можно самому вручную сверстать подобный блок
    4) Можно найти подобный блок в виде готового сниппета. Например, если у вас тема на бутстрапе, то можете посмотреть тут:
    https://bootsnipp.com/
    5) только после того, как вы сверстаете блок в html, css, js, стоит интегрировать его в ВП тему.
    По скрину это вывод новостей, а значит, вам нужно взять цикл ВП и интегрировать его в вашу верстку.
    Ответ написан
    Комментировать
  • Как сделать архив из прикрепленных к посту файлов (ACF repeater)?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Знакомый написал небольшой рнр скрипт, который при выборе файлов из библиотеки ВП и по нажатию кнопки "Создать архив" формирует архив zip и загружает в библиотеку. Можете под себя переделать его.
    Дрбавить в functions.php
    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>";
    }


    В общем, нужно воспользоваться рнр.
    Ответ написан
    Комментировать