Как передать переменную (массив) из одной функцию в другую в functions.php?

Всем привет!

У меня в файле function.php есть такой код который собирает массив из нужных мне значений.

function get_users_token( $company_name ) {
    global $wpdb;
    global $post;

    $company_name = get_user_meta( $post->post_author, 'user_company', true );

    $prepare_query = $wpdb->prepare(
        "SELECT um1.meta_value
         FROM $wpdb->usermeta AS um1
         JOIN $wpdb->usermeta AS um2 ON um1.user_id = um2.user_id
         WHERE um1.meta_key = 'user_token_bot' AND um2.meta_key = 'user_company' AND um2.meta_value = %s",
        $company_name
    );

    return wp_list_pluck( $wpdb->get_results( $prepare_query ), 'meta_value' );

    $tokens = get_users_token( $company_name);
    //print_r($tokens);
    //Есть массив

}

Сразу после этого идет функция которая запускается через js по клику из страницы поста

add_action( 'wp_ajax_send_bot_start_event', 'ev_send_bot_start_event' );
add_action( 'wp_ajax_nopriv_send_bot_start_event', 'ev_send_bot_start_event' );
function ev_send_bot_start_event() {

    $tokens = get_users_token( $company_name);
    //а здесь пусто

    $message = 'send';
    SendMessage($tokens, $message);
    //отправка происходит но с без значений $tokens
    //но если указать значения массива вручную, все работает. Значит переменная не передается.

    wp_send_json_success();
}

История в том, что $tokens оказывается пустой но в своей родной функции там массив. Как мне перенести $tokens в ev_send_bot_start_event?

Ну а это js просто показать как я запускаю функцию ev_send_bot_start_event выше

//это простой скрипт который сделан просто чтобы запускать функцию по клику и клик ее запускает.
$(document).on("click", ".send_bot_start_event", handleSendBotStartEventClick);
    function handleSendBotStartEventClick(e) {
    e.preventDefault();

      let self = $(this);
      let details = self.find('.send_bot_start_event');

      if(self.hasClass('active')) {
        self.removeClass('active');
        self.addClass('deactive');
        $.post(paymentData.ajax, { action: "send_bot_start_event" });
      }else{
        setTimeout(function() {
          $('.send_bot_start_event').removeClass('deactive');
          self.addClass('active');
        }, 6000);
      }

    }

Ответы (1 шт):

Автор решения: KAGG Design

У вас код get_users_token() базируется на global $post. Эта переменная существует только во время главного цикла WP (почитайте о нём), и равна null во время исполнения ajax. Вам надо вытаскивать id текущего поста из html (он обычно где-то в классах body) с помощью js, и отправлять этот id через ajax в php.

→ Ссылка