Ответы пользователя по тегу WordPress
  • Какая переменная соответствует этой, если без подключения woocommerce?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Если по простому, то это javascript-переменная, которая нужна для работы с ajax.
    В админке она есть по умолчанию.
    Woocommerce ее добавляет при установке плагина.
    То есть, без Woocommerce вам нужно ее добавить самостоятельно, так как по умолчанию в вашей теме ее нет.
    Выше Анатолий вам дал ссылку на документацию - там все подробно расписано по данной теме.
    Если еще упростить - вам нужно разобраться и добавить подобный код -

    // Подключаем локализацию в самом конце подключаемых к выводу скриптов, чтобы скрипт
    // 'twentyfifteen-script', к которому мы подключаемся, точно был добавлен в очередь на вывод.
    // Заметка: код можно вставить в любое место functions.php темы
    add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
     function myajax_data(){
    
    // Первый параметр 'twentyfifteen-script' означает, что код будет прикреплен к скрипту с ID 'twentyfifteen-script'
    // 'twentyfifteen-script' должен быть добавлен в очередь на вывод, иначе WP не поймет куда вставлять код локализации
    // Заметка: обычно этот код нужно добавлять в functions.php в том месте где подключаются скрипты, после указанного скрипта
    	wp_localize_script( 'twentyfifteen-script', 'myajax',
    		array(
    			'url' => admin_url('admin-ajax.php')
    		)
    	);
    
    }


    где нужно заменить название скрипта "twentyfifteen-script" на свой.

    В итоге, у вас появится переменная (в данном примере она будет называться url - у себя вы можете ее назвать как вам больше нравится), которая будет хранить url для ajax-запросов и к которой вы сможете обращаться из javascript.
    Ответ написан
  • Как выводить только отзывы в табах woocommerce?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    С помощью хука woocommerce_product_tabs -

    добавляете в functions.php:

    add_filter( 'woocommerce_product_tabs', 'woo_remove_product_tabs', 98 );
    
            function woo_remove_product_tabs( $tabs ) {
    
                unset( $tabs['description'] ); 
                unset( $tabs['additional_information'] ); 
    
                return $tabs;
            }


    где в unset - табы, которые нужно удалить. В вашем случае, это: description и additional_information. Если нужно удалить только доп. информацию, оставьте только строку unset( $tabs['additional_information'] ).

    Более подробно смотрите документацию по данному хуку -
    https://docs.woocommerce.com/document/editing-prod...
    Ответ написан
  • Как сделать API для Wordpress?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    В целом, если без деталей -

    1) В WP под структуру ваших таблиц нужно создать соответствующую структуру данных. Делается это "вручную" (custom types + metabox), либо с помощью плагинов (ACF, Pods и т.п.).

    2) В WP нужно реализовать загрузку данных с вашего сервера, где уже есть API.

    3) В WP реализовать импорт полученных данных (из JSON) в базу WP.

    Итого: создать структуру данных, реализовать получение данных по API, импорт полученных данных в БД сайта.

    Это в общих чертах. Детали реализации - тут уже от конкретики все зависит, каждый разработчик может по своему сделать.
    Ответ написан
  • Wordoress wodocommerce не могу понять где подключить вывод атрибутов в шапке?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Добрый день.

    Конкретно данный код "дернуть" в шапку не получится, так как это файл шаблона woocommerce из каталога /plugins/woocommerce/templates/single-product/, файл - product-attributes.php.

    То есть, этот файл выводится на странице продукта. Куда-либо в другое место его вывести не получится.

    Бренд в title можно выдернуть из глобальной переменной global $product. Например -
    global $product;
    $brand = $product->get_name();

    Как конкретно это делать - тут уже могут быть самые разные реализации. Из $product можно выдернуть любые данные о товаре. Вот ссылка, где можете подобрать методы -
    https://www.businessbloomer.com/woocommerce-easily...
    Ответ написан
  • Как сделать пошаговый конструктор чего-либо (лучше без Woocommerce)?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Для данных - ACF Pro, Pods и подобные плагины. С их помощью в админке вы создадите сущности (товары, если не хотите использовать woocommerce), поля, логику. Все это в дальнейшем можно также через админку поддерживать.

    Во фронтенде - верстаете как вам нужно, выводите данные в верстку. Добавляете браузерную динамику на JS/JQuery.
    Ответ написан
  • Как сделать остаток товаров 0 в Woocommerce если они пропали в прайсе поставщика?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    В админке, у товара на вкладке "Запасы" можно включить опцию "Управлять запасами?" - "Включить управление запасами на уровне товаров".

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

    В результате, товар на сайте есть, а заказать его нельзя.

    Но, это зависит от вашей темы. Какая у вас тема - неизвестно. Выше я описал поведение товара для стандартных тем. Возможно, у вас "самопис", тогда может быть все, что угодно. Попробуйте включить управление запасами, а там уже будет видно.
    Ответ написан
  • Подключение внешней БД sql к сайту, созданному на WordPress. Как реализовать?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Плагины WP здесь ни причем. Выше Анатолий прав, это не типовой функционал.

    В вашем случае нужно смотреть на задачу немного по другому. По сути, у вас есть два сервера. На одном WP со всем своим "хозяйством". И есть где-то на другом сервере другая БД. Вам нужно каким-то образом настроить взаимодействие сайта с внешним сервером. Например, по REST API.

    То есть, ваш сайт на WP (хотя, это не важно), отправляет http запрос на внешний сервер, соответственно, внешний сервер должен "уметь" обработать данный запрос и "отдать" вашему сайту данные. Обычно в формате json. А на стороне вашего сайта нужно реализовать механизм сохранения полученных данных в базу WP. И тоже самое в обратную сторону - внешний сервер должен "уметь" получить данные с вашего сайта, также с помощью http запроса, и сохранить эти данные в свою БД.

    Могут быть другие варианты. Можно в принципе и выгрузками через файл сделать (excel, xml...). Но у вас вроде задача именно на взаимодействие.
    Ответ написан
  • Как работать с данными плагина на Wordpress?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Плагин - это "творение" рук конкретных разработчиков. По сути, что они туда заложили, тем мы и пользуемся.
    Если разработчики плагина заложили в него возможность "вытаскивать" данные, соответственно, это описано в документации к плагину, есть некий API, хуки, и тогда вы можете их использовать. Если такой возможности разработчиками плагина не заложено - тогда нет. Все зависит от плагина, и что в него заложено.
    Ответ написан
  • Как добавить доп. валюты в Woocommerce?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    В корзине и заказе woo будет работать с основной валютой.
    Не совсем понятно - Вы хотите просто поменять символ или используете вторую валюту для cars?
    Ответ написан
  • Как сделать нормальное оформление заказа woocommerce?

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    В Woo оформление заказа устроено так -

    у вас есть страница "Оформление заказа", на которую с помощью шорткода [woocommerce_checkout] выводится компонент checkout. Это вы можете увидеть, открыв в админке данную страницу.

    Компонент checkout "собирается" из нескольких php файлов. Они находятся в каталоге плагина - /wp-content/plugins/woocommerce/templates/checkout. Файлов более 10 шт., каждый из которых отвечает за свою "задачу"

    То, как у вас выводятся поля данных, в каком порядке и в каком составе, нужно править в одном или нескольких файлах. В вашем случае нужно смотреть файлы form-billing.php и form-checkout.php. Возможно еще какие-то, бывает по разному.

    Важно! В самом каталоге плагина файлы не правим! . Они могут быть переписаны при обновлении плагина. Да и вообще так не принято делать. Нужно в корне вашей темы создать каталог woocommerce, в нем подкаталог checkout и в него скопировать файлы из /wp-content/plugins/woocommerce/templates/checkout. И уже там править.

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

    cooder
    @cooder
    JavaScript/React/Node.js/PHP/Wordpress/WooCommerce
    Вариантов реализации может быть несколько. Разница будет в том, какие хуки вы будете использовать. И для каких товаров, простых или вариативных.

    По дефолту цена у вас одна, и в карточке товара поле для цены одно. В нем вы храните цену в "родной" валюте.

    Поэтому, в целом, вам нужно:

    Для хранения второй цены добавить "кастомный" input в карточку товара в админке (тоже самое для третьей цены, четвертой и т.д.). Это можно сделать с помощью хука woocommerce_product_options_general_product_data, также, можно попробовать хук save_post.

    Нужно добавить сохранение нового поля в БД - для этого подойдет хук woocommerce_process_product_meta
    После этого у вас в админке будет выводиться поле и оно будет сохраняться.

    Далее -

    Вывести в интерфейс поле со второй ценой у товаров определенной категории (Second). Для этого придется написать некоторую логику, например - if (in_category('Second')) {...вывести вторую цену...}.

    Также вам нужна логика, чтобы правильно обработать ситуации, когда у вас одна цена === 0, вторая !== 0, обе цены !== 0 и т.д. То есть, придумать, как WC должен понять какую цену выводить, если цена === 0 или null.

    Еще один момент - обработка второй цены в корзине. По дефолту WC не сможет "понять", что ваш кастомный input - это цена. Для того, чтобы добавить в корзину что-то "неродное", подойдет хук woocommerce_before_calculate_totals.

    Код примерно такой:

    1. Добавляем "кастомный" input (в functions.php или в другой скрипт, в котором у вас собрана логика WC):

    add_action('woocommerce_product_options_general_product_data', 'add_custom_price_usd');
    function add_custom_price_usd() {
    	
            echo '<h3>Цена в долларах</h3>';
    	
    	woocommerce_wp_text_input(
            array(
                'id' => 'price_usd',
                'placeholder' => 'Цена в долларах',
                'label' => __('Цена в долларах', 'my-text-domain'),
                'desc_tip' => 'true'
               )
    	);
    }


    2. Добавляем хук для сохранения второй цены:

    add_action('woocommerce_process_product_meta', 'save_custom_price_usd');
    function save_custom_price_usd( $post_id ){
    
    	$price_usd_field = $_POST['price_usd'];
    	update_post_meta($post_id, 'price_usd', esc_html($price_usd_field));
    
    }


    3. Добавляем "обработку" второй цены в корзине:

    add_action( 'woocommerce_before_calculate_totals', 'set_custom_price_usd_to_cart', 10, 1 );
    function set_custom_price_usd_to_cart( $cart ){
            if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        	    return;
    
    	if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
    	    return;
    
    	foreach ( $cart->cart_contents as $key => $value ) {
                if ( ... проверяем, принадлежит ли товар категории Second... ) {
                    /* если да - меняем цену */
                    $value['data']->set_price(... цена в долларах...);
                }
            }
    }


    Здесь внутри foreach код может быть разный, так как не известно, каким образом вы будете получать цену и добавлять ее в корзину. Реализация зависит от вашего кода. Поэтому я описал общий принцип.

    4. Выводим вторую цену в интерфейс - поскольку цену мы сохранили как метабокс, то в интерфейсе получаем ее по id товара с помощью get_post_meta() :
    get_post_meta( $product->get_ID(), 'price_usd', true );


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