Поддержка Проблемы и решения Не понятна логика

  • Всем привет.
    В общем имеем страницу (модальное окно), с такими параметрами:

    global $post, $user_ID, $bid_author_name_id, $wpdb, $post_dump_gen_num, $post_dump_spor_num;
    $bid                 = get_post_meta( $post->ID, 'accepted', true );
    $bid_author          = get_post_field( 'post_author', $bid );
    
    $bid_author_name_id     = get_the_author_meta( 'ID', $bid_author );
    
    //проверяем пост в бд на совпадения 1-1 и 2-2
    $post_dump_gen= ($wpdb->get_row("SELECT gener_vin  FROM <code>wp_sp2bids</code> WHERE onoff=1 AND <code>id_author</code> LIKE '$bid_author_name_id' AND <code>id_post</code> LIKE '$post->ID'"));
    $post_dump_spor= ($wpdb->get_row("SELECT spor_vin  FROM <code>wp_sp2bids</code> WHERE onoff=1 AND <code>id_author</code> LIKE '$bid_author_name_id' AND <code>id_post</code> LIKE '$post->ID'"));
    
    foreach ($post_dump_gen as $value) {
        $post_dump_gen_num = $value;
        //echo $post_dump_gen_num;
    };
    
    foreach ($post_dump_spor as $value) {
        $post_dump_spor_num = $value;
        //echo $post_dump_spor_num;
    };

    все работает без проблем, далее через js подключается файл для отработки после нажатия кнопки:

    global $post, $user_ID, $bid_author_name_id, $post_dump_gen_num, $post_dump_spor_num, $wpdb;
    include($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
    
                                                            if ($post_dump_gen_num==0 && $post_dump_spor_num==0) {
                                    //запись в бд
                                    $wpdb->update( 'wp_sp2bids',
                                        array( 'gener_vin' => 1 ),
                                        array( 'id_post' => $post->ID,
                                            'onoff' => 1,
                                            'id_author' => $bid_author_name_id
                                        )
                                    );
                                    //уведомление
    
                                }

    почему он не видит переменные: $post_dump_gen_num, $post_dump_spor_num,$post->ID, $bid_author_name_id? без всех условий и переменных $wpdb отрабатывает норм

Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Модератор Yuri

    (@yube)

    через js подключается файл для отработки

    Имеется в виду ajax?

    почему он не видит переменные: $post_dump_gen_num,

    Может потому, что выполняется в другом процессе?

    Имеется в виду ajax?

    ну да:

     $('.review-form').submit(function () { // Ловим отправку формы
                            $.ajax({

    Может потому, что выполняется в другом процессе?

    да, но ведь подключены глобальные переменные

    Модератор Yuri

    (@yube)

    да, но ведь подключены глобальные переменные

    global — это область видимости переменной внутри одного процесса.
    Похоже, Вам стоит подтянуть матчасть, начиная с принципов работы веб.

    global — это область видимости переменной внутри одного процесса.
    Похоже, Вам стоит подтянуть матчасть, начиная с принципов работы веб.

    Юрий правильно говорите, просто у меня глаз замылился.
    В этом файле нужно все изначально прописывать, global туда не передается

    Смотрите а что если мы имеем на странице:

    include($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
    
    $post_id = get_the_ID();

    но почему $post_id не отрабатывается?

    Модератор Yuri

    (@yube)

    имеем на странице:

    Разве это страница? Странице include wp-load.php не нужен, потому что ее формирует движок. А если инклюд нужен, то это автономный скрипт. Решение не из лучших, надо заметить.

    почему $post_id не отрабатывается?

    А почему он должен «отрабатываться»? Смотрим доки:

    get_the_ID()
    Retrieve the ID of the current item in the WordPress Loop.

    Еще раз: in the WordPress Loop. Цикла нет — результат не определен. И я не уверен, что при таком способе инициализации делается начальная выборка записей.

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

    А почему я не могу получить ИД вне цикла так:
    $wp_query->get_queried_object_id();

    $data = array(
      'ajaxUrl' => admin_url( 'admin-ajax.php' ),
      'postID' => get_the_ID(),
    );
    wp_localize_script( 'main', 'php_data', $data );
    let postID = php_data.postID;
     
    data: {
        post_id: postID
    }
    
    	
    
    $post_id = $_POST['post_id'] );
Просмотр 8 ответов — с 1 по 8 (всего 8)
  • Тема «Не понятна логика» закрыта для новых ответов.