WordPress как на ладони
rgbcode is looking for WordPress developers.

Получение результата функции во время do_action()

Немного не понимаю что не так. Пишу свой плагин, мне надо получить все записи типа продукты (Вукомерс), чтобы сравнить их с выдачей с апи и потом делать действия или не делать.. Я в плагине делаю так

$app = new App();
add_action('init', [$app, 'getProductsData']);

сам класс лежит в другом файле. уже подключен. Вот код метода

public static function getProductsData(){
		$obj = new WP_Query([
			'post_type' => 'product',
			'posts_per_page' => -1
		]);
		$products = [];
		if(!empty($obj->posts)){
			foreach ($obj->posts as $postObj){
				$src = get_the_post_thumbnail_url($postObj->ID, 'full');
				$metaData = get_post_meta($postObj->ID);
				$sku = $metaData['_sku'][0];
				$products[$sku] = [
					'sku' => $metaData['_sku'][0],
					'name' => $postObj->post_title,
					'desc' => $postObj->post_content,
					'price' => $metaData['_price'][0],
					'src' => $src,
					'in_stock' => $metaData['_stock'][0],
					'id' => $postObj->ID
				];
			}
		}
		return $products;
	}

Если внутри него завардампить $products - данные есть. Но как мне их наружу получить? Пробовал передавать этот код анонимной функцией, а перед add_action('init', my anonimaze function code here) делать вот так: global $products; $products = []; передаввать ее в callback при помощи use, а внутри уже заполнять, но когда я делаю var_dump($products); сразу после add_action('init', my anonimaze function code here) то получаю пустой массив. Как мне получить эти данные?

0
Anton
1.1 года назад
  • 1
    Kama9743

    Во-первых, вызываешь статический метод нестатически, получишь ошибку в будущих версиях PHP.

    Во-вторых, если юзаешь global. То не нужны никакие колбеки и use. Просто внутри функции объяви что переменная глобальная:

    global $foo;
    $foo = [];
    add_action( 'action', 'my_func' );
    function my_func(){
    	global $foo;
    
    	$foo[] = 'value';
    }

    Где-то в другом файле...

    global $foo;
    
    print_r( $foo );

    Это прочитай: https://wp-kama.ru/id_7641/globalnye-peremennye-v-wordpress.html

    Но вообще, лучше не юзать глобальные переменные, заверни лучше в свой класс её как статическое свойство, чтобы не торчала она по всему PHP скрипту.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация