Вызов метода Class из другого файла

Мне нужна помощь с плагинами, классами и методами в PHP.

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

PS. Используемый плагин — Learndash-Group-Registration, а не Woocommerce. Woocommerce используется для продуктов и заказов.

Это файл, в котором я пытаюсь вызвать метод: (file.php)

    $args = array(
'order_id' => 1234,
);
include '/wp-content/plugins/ld-
group-registration/modules/class-wdm-woocommerce.php';

WdmLdWooCommerce::wdmCourseOrderCompletedCreateGroup( $args[ 'order_id' ] );

Класс-WDM-woocommerce.php

    <?php
namespace wisdmlabs\ldgroups;

defined('ABSPATH') || exit;
if (!class_exists('WdmLdWooCommerce')) {
class WdmLdWooCommerce
{
public function wdmCourseOrderCompletedCreateGroup($order_id)
{
if ($this->wdmIsRenewalOrder($order_id)) {
return;
}
$order = new \WC_Order($order_id);
$product_id = null;
$group_data = array();
$items = $order->get_items();
$group_creation_done = get_post_meta($order_id, 'wdm_successful_group_creation', true);

if ($group_creation_done == 'done') {
return;
}

if (WC_VERSION < '3.0.0') {
foreach ($items as $item) {
$product_id = $item[ 'product_id' ];
$quantity = apply_filters('wdm_modify_total_number_of_registrations', $item[ 'qty' ], $product_id);
$product_type = wdmGetProductType($product_id);
$group_registration = isset($item[ 'Group Registration' ]) ? $item[ 'Group Registration' ] : '';
//$courses = maybe_unserialize(get_post_meta($product_id, '_related_course', true));
$courses = '';
if ($product_type == 'variable-subscription') {
$variation_id = $item['variation_id'];
if (!empty($variation_id)) {
$courses = maybe_unserialize(get_post_meta($variation_id, '_related_course', true));
}
$product_id = $variation_id;
} else {
$courses = maybe_unserialize(get_post_meta($product_id, '_related_course', true));
}
if (!empty($courses) && $group_registration != '') {
$uid = $order->get_user_id();
$user1 = new \WP_User($uid);
$user1->add_role('group_leader');
$user1->remove_role('customer');
$user1->remove_role('subscriber');
$group_data[ 'leader' ] = $uid;
$group_data[ 'course' ] = $courses;
$this->wdmCreateLearndashGroup($group_data, $order, $order_id, $quantity, $product_id, $product_type);
update_post_meta($order_id, 'wdm_successful_group_creation', 'done');
}
}
} else {
foreach ($items as $key_item_id => $item) {
$key_item_id = $key_item_id;
$product_id = $item[ 'product_id' ];
//$quantity = $item[ 'qty' ];
$quantity = apply_filters('wdm_modify_total_number_of_registrations', $item[ 'qty' ], $product_id);
$product_type = wdmGetProductType($product_id);
$group_registration = isset($item[ 'Group Registration' ]) ? $item[ 'Group Registration' ] : '';
$courses = '';
if ($product_type == 'variable-subscription') {
$variation_id = $item['variation_id'];
if (!empty($variation_id)) {
$courses = maybe_unserialize(get_post_meta($variation_id, '_related_course', true));
$product_id = $variation_id;
}
} else {
$courses = maybe_unserialize(get_post_meta($product_id, '_related_course', true));
}
if (!empty($courses) && $group_registration != '') {
$uid = $order->get_user_id();
$user1 = new \WP_User($uid);
$user1->add_role('group_leader');
$user1->remove_role('customer');
$user1->remove_role('subscriber');
$group_data[ 'leader' ] = $uid;
$group_data[ 'course' ] = $courses;
$this->wdmCreateLearndashGroup($group_data, $order, $order_id, $quantity, $product_id, $product_type);
update_post_meta($order_id, 'wdm_successful_group_creation', 'done');
}
}
}
// exit;
}
}
?>

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

Когда я пытаюсь вызвать метод таким образом, я получаю сообщение об ошибке:

‘Неустранимая ошибка: невозможно объявить класс wisdmlabs \ ldgroups \ WdmLdWooCommerce, потому что имя уже используется в C: \ wamp64 \ www \ meritmind \ site \ public \ wp-content \ plugins \ ld-group-registration \ modules \ class- wdm-woocommerce.php в строке 6 ‘

И когда я удаляю строку «включить», я получаю это сообщение об ошибке:

‘Неустранимая ошибка: необнаруженная ошибка: класс’ WdmLdWooCommerce ‘не найден в C: \ wamp64 \ www \ meritmind \ site \ public \ wp-content \ themes \ meritgo \ file.php в строке 108’

Я не понимаю, что я делаю не так. В какой-то момент он говорит, что я не объявил класс, но когда я объявляю класс с использованием include, он говорит, что класс уже объявлен.

Был бы очень признателен за помощь,

С наилучшими пожеланиями, Ledung

0

Решение

Это терпит неудачу по 2 причинам:

1) вы используете include, а не include_once. С помощью _once в общем, означает, что код не повторяется, если он уже был успешно использован ранее (что в этом случае остановило бы определение класса во второй раз).

2) твой class_exists('WdmLdWooCommerce') не работает, потому что это не полное имя класса, т. е. оно всегда возвращает false, поскольку «WdmLdWooCommerce» не существует, но \wisdmlabs\ldgroups\WdmLdWooCommerce должен.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector