Ответы пользователя по тегу WordPress
  • Как принимать оплаты на 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>";
    }


    В общем, нужно воспользоваться рнр.
    Ответ написан
    Комментировать
  • Можно ли писать плагины под wordpress на c++ или java?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    ВП написан на рнр, АПИ разработки плагина для ВП поддерживается на рнр и соответственно, плагины тоже нужно писать на рнр.

    Что касается java, то вы можете взаимодействовать с ВП используя WP REST API Java client. При этом в нем сейчас многое реализовано.
    https://github.com/Afrozaar/wp-api-v2-client-java
    НО! это не имеет отношения к разработке плагинов. На c++ тоже наверное, что-нибудь найдется...

    Т.е. вы можете написать некий функционал и интегрировать его через WP REST API.
    Ответ написан
    1 комментарий
  • Есть ли плагины личных блогов для пользователей на ВордПресс?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Просто переведите ВП в режим мультисайта и получие аналог wordpress.com
    Ответ написан
    Комментировать
  • Почему WordPress отдает циклический редирект?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    1) конфигурация сервера apache, nginx, apache + nginx
    2) смотрите сам файл htaccess
    3) может какой-то плагин добавляет редирект
    4) проверьте обновили ли вы урлы в БД
    5) раньше сайт лежал в корне, а теперь, в субдиректории. Прочитайте:
    https://wordpress.org/support/article/giving-wordp...
    https://www.wpbeginner.com/wp-tutorials/how-to-ins...
    https://www.youtube.com/watch?v=inokGZeemUw
    Ответ написан
    Комментировать
  • Не работают статьи определенной рубрики WP?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Подозреваю, что у вас кэш в браузере...
    При переходе по вышеуказанной ссылке, а затем по записям, все прекрасно работает.
    Вывод - у вас закэшированная страница в браузере
    Ответ написан
    Комментировать
  • Как в шаблоне wordpress отразить свой mail?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    https://wp-kama.ru/function/get_option
    В частности:
    <?php echo get_option("admin_email"); ?>
    Если нужно в виде ссылки, то:
    <a href="mailto:<?php echo get_option("admin_email"); ?>"><?php echo get_option("admin_email"); ?></a>
    Ответ написан
    1 комментарий
  • Contact form 7, как сделать кнопку которая добавляет строки для посетителей сайта?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Я бы рекомендовал вам сделать это не через CF7, а через плагин ACF Pro.
    А использовать тип поля "Повторитель". Вывести кастомные поля через acf_form на странице.
    А дальше обрабатывать отправку формы.
    Ссылки:
    https://www.advancedcustomfields.com/resources/rep...
    https://www.advancedcustomfields.com/add-ons/repea...
    https://www.advancedcustomfields.com/resources/cre...
    https://www.advancedcustomfields.com/resources/acf...
    Ответ написан
    Комментировать
  • Как сделать две кнопки или колонки рядом, на одном уровне в wp bakery page builder?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Вам серьезно стоит изучить CSS.
    Пробовал в одной колонке разместит, но тогда они друг над другом получаются, а не в одну линию...

    Потому что по умолчанию кнопкам задан стиль display: block , чтобы они были в один ряд нужно сменить на display: inline-block

    Что касается VC, то вот пример:
    5ce92d7236e40046510256.png
    Обратите внимание на пункт "Выравнивание" - В линию

    Результат:
    5ce92d4c78bf4807912021.png

    Если ширина колонки не позволяет делать этого, то кнопка будет отображаться в колонку
    Ответ написан
  • Почему не работает пагинация WP?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Быстро просмотрел ваш код...
    А где значение переменной $paged ?
    Вот, ссылка - https://wp-kama.ru/question/paginatsiya-v-wp_query
    обратите внимание на значение аргумента paged
    'paged' => get_query_var('paged') ?: 1

    Вот еще пример:
    https://wordpress.stackexchange.com/questions/2541...
    'paged' => $paged

    но до этого переменная определена:
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    Ответ написан
  • Как сделать автопостинг из группы Вконтакте в Instagram?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Из тех, чем мне приходилось пользоваться могу посоветовать SNAP (social network auto poster )
    vk & instagram поддерживается. Вот, только не помню поддерживается ли instagram в бесплатной версии.
    Скачайте и гляньте.
    Ответ написан
  • Как зайти в sitemap?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    У вас очевидно где-то есть редирект. Могу предположить, что какой-то плагин при изменении урлов автоматически создает редиректы. Например, Yoast SEO
    Ответ написан
    Комментировать
  • Как в WordPress вызвать PHP-функцию при нажатии на кнопку?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Если хотите на клиенте вызвать рнр, то разве что через ajax.
    https://wp-kama.ru/id_2018/ajax-v-wordpress.html
    Отправляете аякс запрос с нужными данными на сервер, обрабатываете на сервере данные и возвращаете нужное значение.
    Ответ написан
    2 комментария
  • Нужно сделать подобие социальной сети для сотрудников?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    По своему опыту, скажу что создавать соц. сеть на базе ВП не очень-то профессиональное решение, хотя это практикуется.
    Будь я на вашем месте, то поднял бы соц. сеть используя фреймворк на любом языке, которым вы владеете (yii2, django, RoR, Spring)
    Что касается ВП, то:
    1) WP Recall личный кабинет и в принципе огромное кол-во расширений (платных). Можно реализовать то, что вы хотите. (бесплатный + есть платные дополнения)
    2) Ultimate Member соц. сеть, как по мне получше чем BuddyPress. + есть интеграция с форумом bbPress. (бесплатный плагин + платные дополнения) - https://ru.wordpress.org/plugins/ultimate-member/
    3) BuddyPress + bbPress (бесплатный) https://buddypress.org/
    4) PeepSo (платный) https://www.peepso.com/

    + Для управления ролями пользователей можете использовать User Role Editor -
    https://ru.wordpress.org/plugins/user-role-editor/

    Из всего этого я бы выбрал Ultimate Member или WP Recall. С PeepSo не знаком, но насколько я знаю он более функционален.
    Ответ написан
    2 комментария
  • Плагин товары из корзины отправить на почту?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Приветствую!
    Итак, начнем с самого простого...
    С учетом того, что вы не хотите создавать полноценный магазин, то Woocommerce вам не нужен. (Правда, я бы вам его посоветовал бы).
    Идем дальше...
    Есть огромное кол-во плагинов, но большинство из них реализуют полноценный функционал интернет-магазина. Опять-таки если он вам не нужен, то можете использовать простой js скрипт корзины.
    1) создать кастомный тип записи
    https://wp-kama.ru/function/register_post_type

    2) установить js скрипт корзины
    Например - https://cartjs.org/
    Или наберите в гугл js cart и найдете кучу скриптов.

    3) добавляете ваши товары (custom post type) на сайт + создайте кнопку "добавить в корзину".
    Тут не помешало бы еще изучить технологию аякс (ajax)

    4) На клиенте обрабатываете данные в корзине и по нажатию кнопки "Купить" отправляете на сервер.
    На стороне сервера через wp_mail () не через phpMail отправляете письмо куда нужно + создаете доп. запись.
    Скорее всего вам нужно создать еще один CPT "Заказы", который и будет создаваться при оформлении заказа и будет содержать информацию о клиенте и о прибретенных товарах.
    Ответ написан
    Комментировать
  • PageSpeed Insights выдает разные результаты одного сайта на разных системах?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Однозначно, ищите проблему в конфигах сервера.
    Некорректно настроенный сервер или не настроенный вовсе может выдавать подобные результаты, если у вас VPS.
    Также ПО сервера может отличаться... например, на shared может у вас только apache или nginx или apache/nginx и т.д. Версия рнр. расположение серверов..... Уровень сжатия и есть ли вообще сжатие gzip. В общем, копайте в конфигах
    Ответ написан
    Комментировать
  • Почему ошибка в W3 Total Cache: "It appears Page Cache URL rewriting is not working. Please verify that the server configuration allows .htaccess"?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Проверьте есть ли файл htaccess в корне сайта и может ли ВП и плагины перезаписывать его. Если нет, то проверьте chmod & chown.
    Владелец ПО Apache & владелец файла должен совпадать. chmod 644 для всех файлов, 755 для директорий.

    cURL error 28: Operation timed out after 5000 milliseconds with 0 bytes received

    При помощи cUrl плагин пытается достучаться до нужного файла и у него не получается.

    mod_rewrite: Not detected (required for disk enhanced Page Cache and Browser Cache)

    Обратите внимание, он у вас отключен. Надо в конфигах рнр включить его
    https://stackoverflow.com/questions/38862270/w3tc-...
    Ответ написан
  • Нужен ли плагин Woocommerce для блога, чтобы добавлять картинки через excel файл?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Причем тут Woocommerce вообще? Это плагин интернет-магазина...

    Вы хотите массово через xlsx/csv импортировать картинки в запись. Стоит уточнить в какую область вы хотите их загружать... А так могу посоветовать вам следующее решение:

    1) установить ACF (желательно Pro)
    2) создать тип поля Галерея и применить его для записей.
    3) вывести галерею на странице записи, как вы хотите (шаблон single.php)
    4) Через Wp All Impot импортировать картинки в кастомное поле
    Ответ написан
    2 комментария
  • Как отобразить фильтр по атрибутам на странице магазина woocommerce?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Использую плагин WooCommerce Product Filter by dzeriho
    Пример реализации - https://erfurt.by/ там как раз выведены атрибуты
    Ответ написан
    Комментировать