Использование хуков Woocommerce в php-файле без темы

Я работаю над интегрированной установкой WordPress для woocommerce.

Я создал отдельный файл SearchByNumber.php и поместил его по пути: / wp-content / plugins / ajax-test

Обычно это не настоящий плагин (я не знаком с написанием плагинов). Это cURLing веб-сервис и получение результатов в xml.

Что я хочу сделать, так это зациклить SKU из этого xml и получить их идентификаторы, цены, акции и т. д. Из woocommerce.

Я много пробовал, но каждый раз получаю разные ошибки: класс не найден, метод не найден, нулевой объект и т. д.

global $product;
// a lot codes curling, looping, etc...
$product_id = $product->get_product_id_by_sku($sku_from_xml);
$product = wc_get_product($product_id);
$sku = $product->get_sku();
// or
$price = $product->get_price();

Я пытаюсь найти идентификатор продукта по артикулу, а затем получить от продукта все, что захочу.

PS: Я использую эти $product->get_sku()$product->get_attribute('Brand') в фрагментах php на страницах продуктов. Они там хорошо работают.

как зацепить, отфильтровать, класс ?? Что я делаю неправильно?

Буду признателен за любую помощь.

Большое спасибо,

Мурат

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
454
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете получить доступ к какой-либо функции или классу, если не загрузите Wordpress.

поэтому, если вы хотите загрузить Wordpress из автономного скрипта, вам необходимо сделать следующее:

<?php
require '../../../wp-load.php'; //Load WordPress



$product_id = wc_get_product_id_by_sku( 'test' ); //get the product id

if ( $product_id ) {
    $product = wc_get_product( $product_id ); //get the product
    $price   = $product->get_price(); //get the price
    echo $price;
}

но я настоятельно рекомендую загрузить ваш скрипт как плагин для большей безопасности, и для этого сначала просто переименуйте файл, чтобы он соответствовал стандарту Wordpress, например, ajax-test.php, а затем добавьте следующий пример кода в свой скрипт

<?php
/*
Plugin Name: Ajax Test
*/
defined( 'ABSPATH' ) or die( 'No script kiddies please!' ); //Security Check block direct access to your plugin PHP files 



add_action( 'init', 'function_name' );

function function_name() {
    $product_id = wc_get_product_id_by_sku( 'test' ); //get the product id

    if ( $product_id ) {
        $product = wc_get_product( $product_id ); //get the product

        $price = $product->get_price(); //get the price
        echo $price;
    }
}

затем перейдите к бэкэнду Wordpress и активируйте плагин.

в обоих случаях теперь у вас есть доступ ко всем хукам WordPress и Woocommerce

вы можете проверить ссылку на плагин WordPress по следующей ссылке:

Ссылка

Привет @kashalo, большое спасибо за вашу помощь. require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); у меня работал. Но я бы предпочел ваш второй совет, если вы так говорите. Мой файл "SearchByNumber.php" принимает опубликованный параметр с другой страницы WordPress, а затем ищет этот опубликованный параметр. На данный момент в нем около 300 строк, и их количество растет. Есть много if / else, foreach и т. д. Это немного сложно. Как превратить его в плагин?

Murat 13.09.2018 18:11

@Murat, вы можете перейти по ссылке выше, чтобы создать свой собственный плагин, и есть множество обучающих видео, которые шаг за шагом помогут вам

kashalo 13.09.2018 18:27

хорошо @kashalo, спасибо большое. Я уже принял твой ответ. Кстати, это правильный способ вызвать wp-load require($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');? Что это должно быть: require или require_once?

Murat 13.09.2018 18:31

@Murat в обоих направлениях будет работать для вас, вы можете использовать require_once, если вам будет удобнее

kashalo 13.09.2018 18:34

Другие вопросы по теме