Я мог бы действительно сделать с некоторой помощью рабочей, где я пошел неправильно. Я пытаюсь добавить переменные в массив, а затем json_encode этого массива для сохранения в БД для вызова позже, но его бросали все виды ошибок, но все еще работает ?!
Ошибки:
PHP Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '$ events_array' (T_VARIABLE), ожидая ')'
PHP Примечание: Undefined переменной: event_cat_id в
PHP Примечание: Undefined индекс: в
(Все ошибки возникают на тот же номер строки из функции 2)
Функция 1 - Создает массив событий и возвратов
function __create_events_array() {
// Start clean $events array,
$events_array = array();
// Event category args
$event_categories = get_categories( array(
'orderby' => 'name',
'taxonomy' => 'tribe_events_cat',
'posts_per_page' => -1,
) );
// Event category loop
foreach ( $event_categories as $category ) {
// Event Calendar Date Args
$range_start = date('Y-m-d',strtotime('today midnight'));
$get_event_args = array(
'post_status' => 'publish',
'post_type' => 'Tribe_Events',
'posts_per_page' => 1,
'meta_key' => '_EventStartDate',
'orderby' => '_EventStartDate',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => '_EventStartDate',
'value' => $range_start,
'compare' => '>=',
)
),
'eventDisplay'=>'custom',
//query events by category
'tax_query' => array(
array(
'taxonomy' => 'tribe_events_cat',
'field' => 'slug',
'terms' => $category->slug,
'operator' => 'IN'
),
));
// Event calendar Date loop
$get_events = null;
$get_events = new WP_Query($get_event_args);
if($get_events->have_posts()) :
while($get_events->have_posts()) :
$get_events->the_post();
// Events to add to $events_array
$events_to_add =array(
'start_date' => tribe_get_start_date(),
'end_date' => tribe_get_end_date(),
);
// add to $events_array
$events_array[$category->term_id] = $events_to_add;
endwhile;
endif;
wp_reset_query();
wp_reset_postdata();
}
return $events_array;
}
Функция 2 - Вызывает возвращаемый массив из функции 1, выбирает вспомогательный массив по категории идентификатора ($ event_cat_id])
function __sync_setup(){
$events_array = __create_events_array();
// Products to sync args
$args = array(
'post_type' => 'product',
'post_status' => array('publish', 'pending', 'draft', 'future', 'private'),
//'nopaging' => false,
'orderby' => 'ID',
'order' => 'DESC',
//'parent' => array( 13, 14, 15 ),
'posts_per_page' => -1,
//'offset' => 3,
'meta_query' => array(
'relation' => 'and',
array(
'relation' => 'or',
array(
'key' => '_sku',
'value' => 'sku1',
'compare' => 'NOT LIKE',
),
),
array(
'relation' => 'or',
array(
'key' => '_sku',
'value' => 'sku2',
'compare' => 'NOT LIKE',
),
),
array(
'relation' => 'or',
array(
'key' => '_sku',
'value' => 'sku3',
'compare' => 'NOT LIKE',
),
),
array(
'relation' => 'or',
array(
'key' => '_sku',
'value' => 'sku4',
'compare' => 'NOT LIKE',
),
),
array(
'relation' => 'or',
array(
'key' => '_sku',
'value' => 'sku5',
'compare' => 'NOT LIKE',
),
),
)
);
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
global $product;
// Get ID of current product
$product_id = $product->get_id();
// Get event category slug from product (custom field)
$product_cat_slug = get_post_meta( $product_id, 'my_dates', true);
// Get event cat term
$event_cat_term = get_term_by('slug', $product_cat_slug, 'tribe_events_cat');
// Get event cat id
if ($event_cat_term) {
$event_cat_id = $event_cat_term->term_id;
}
// Get Events to sync
$events_to_sync = json_encode($events_array[$event_cat_id]); // Line that causes the errors and warnings
//Get Current Product Events
$existing_product_events = get_post_meta( $product_id, 'product_dates', true );
// Check if custom field exists before loop
if( !empty($product_cat_slug) ) {
if ( str_ireplace( '\\', '', $events_to_sync) === $existing_product_events ) {
//echo 'Matched - ' . $product->get_sku() . '<br>';
// Update custom field with current date
} else {
update_post_meta( $product_id, 'product_dates', $events_to_sync );
//echo 'Updated - ' . $product->get_sku() . '<br>';
}
} else {
echo '<strong style=color:red;>No product date for - </strong>' . $product->get_sku() . '<br>';
}
}
}
/* Restore original Post Data */
wp_reset_postdata();
}
скрипт делает работу по назначению, но знает, им все еще не делает это правильно.
Спасибо за любой вклад.