Поддержка Проблемы и решения Cron и таксаномии

  • Решено dsqwared

    (@dsqwared)


    Здравствуйте…
    Столкнулся с такой проблемой, может кто поможет, вчера убил весь день…

    есть два файла
    file1.php

    <?php
    function export() {
    $term_list = wp_get_post_terms($the_post_id, 'property_category');
    mail("email@mail.ua","subject",print_r($term_list,1));
    }
    ?>

    file2.php

    <form method="post">
    <input type="submit" id="export_to_xls" name="export_to_xls" style="float: left;" type="submit" value="export_to_xls">
    </form>
    
    <?php
    if(isset($_POST['export_to_xls']))
    {
    include_once dirname(__FILE__).'/../../../actions/file1.php';
    export();
    }
    ?>

    Вот так по нажатию кнопки отправляется мейл с таксаномией все ок!!!!

    а если делать вызов функции через CRON выдает ошибку WP_ERROR, не видит таксаномии почему-то.

    помогите пожалуйста, как победить, осталось дописать маленький кусок кода, никак не могу продвинуться.

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Здравствуйте.

    $term_list = wp_get_post_terms($the_post_id, ‘property_category’);

    А $the_post_id откуда берется?

    Автор dsqwared

    (@dsqwared)

    $exportQuery = new WP_Query( array( 'post_type' => $exportOptions['cpt'], 'orderby' => 'title', 'order' => 'ASC', 'posts_per_page'=> -1 ));			
    
    while ( $exportQuery->have_posts() ) :
    $the_post_id = (get_the_ID())? get_the_ID():$exportQuery->post->ID;
    ...

    кстати когда кроном вызываю функцию
    get_the_ID() = NULL

    приходится из sql запроса брать post_id

    Автор dsqwared

    (@dsqwared)

    вначале написал супер упрощенный вариант кода.. чтобы не путать вас

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    кстати когда кроном вызываю функцию
    get_the_ID() = NULL

    приходится из sql запроса брать post_id

    А если после

    while ( $exportQuery->have_posts() ) :

    написать

    $exportQuery->the_post();

    и после этого вызвать get_the_ID() появляется значение?

    Автор dsqwared

    (@dsqwared)

    хоть бери и sql запросом вытягивать term_id по post_id
    но это уже крайний вариант, хочу понять, что не так?

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    но это уже крайний вариант, хочу понять, что не так?

    Я думаю, при вызове с помощью CRON — WordPress-окружение не подгружается и функции работают некорректно.

    Попробуйте добавить нечто подобное перед получением данных:

    $path = 'ПУТЬ_ДО_КОРНЕВОЙ_ДИРЕКТОРИИ_WORDPRESS';
    
    include_once $path . '/wp-config.php';
    include_once $path . '/wp-load.php';
    include_once $path . '/wp-includes/wp-db.php';
    include_once $path . '/wp-includes/pluggable.php';

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Достаточно wp-load.php 🙂

    Автор dsqwared

    (@dsqwared)

    да, после $exportQuery->the_post(); get_the_ID() заработал )

    Автор dsqwared

    (@dsqwared)

    все-равно
    выдает на мыло

    WP_Error Object
    (
        [errors] => Array
            (
                [invalid_taxonomy] => Array
                    (
                        [0] => Неверная таксономия
                    )
    
            )
    
        [error_data] => Array
            (
            )
    
    )

    уже подключил все

    include_once ABSPATH.'wp-load.php';
    include_once ABSPATH. 'wp-config.php';
    include_once ABSPATH . '/wp-includes/wp-db.php';
    include_once ABSPATH . '/wp-includes/pluggable.php';
    Автор dsqwared

    (@dsqwared)

    У кого есть решение, все еще актуально!!

    времянку пока сделаю так

    SELECT wp_terms.term_id FROM wp_terms
    INNER JOIN wp_term_taxonomy ON wp_terms.term_id  = wp_term_taxonomy.term_id
    INNER JOIN wp_term_relationships ON wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id
    INNER JOIN wp_posts ON wp_posts.ID = wp_term_relationships.object_id
    INNER JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id)
    where wp_posts.ID = 20456
    and wp_postmeta.meta_key = 'property_status'
    and wp_term_taxonomy.taxonomy = 'property_category'

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Функция вызывается через планировщик, встроенный в WordPress, или внешний? В первом варианте файлы подключать не нужно, они уже подключены.

    вначале написал супер упрощенный вариант кода.. чтобы не путать вас

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

    Было бы здорово посмотреть весь код, иначе гадать можно долго 🙂

    Автор dsqwared

    (@dsqwared)

    я так понял, в самом шаблоне добавляется несколько таксаномий в постип,
    а при вызове крона, он эти таксаномии не видит… видит только стандартные…

    Автор dsqwared

    (@dsqwared)

    т.е. не он, а функция которую он вызывает…

    сейчас попробовал вызвать по кнопке функцию… $wp_taxonomies выдал все что надо…

    а кроном только стандартные $wp_taxonomies

    Автор dsqwared

    (@dsqwared)

    это что надо перечитывать весь шаблон сайта, чтобы подтянулись все что он добавляет?

    Автор dsqwared

    (@dsqwared)

    в общем через родной крон так ничего не получилось,
    сделал так:

    отключил WP-cron define(‘DISABLE_WP_CRON’, true);
    установил так-же define(‘ALTERNATE_WP_CRON’, true);
    в wp-config

    зашел на хостинг и п в планировщике настроил запуск wp-cron.php

    теперь все работает как надо.

    может кому пригодится

Просмотр 15 ответов — с 1 по 15 (всего 16)
  • Тема «Cron и таксаномии» закрыта для новых ответов.