it-swarm.com.ru

Исправляемая фатальная ошибка: объект класса stdClass не может быть преобразован в строку после WP 4,7

Это меня сбило с толку, потому что код работал в течение последних 2 лет, но после последнего обновления WordPress до 4.7 он прошел.

WordPress выдает ошибку. Catchable fatal error: объект класса stdClass не может быть преобразован в строку в строке 42 файла functions.php, которая выглядит так:

WHERE {$wpdb->terms}.term_id = {$term_id}

в куске кода ниже. Любая помощь приветствуется.

// Detects Category ID for category Info custom post type
function wph_wp() {
global $wpdb, $cc_post_id;

$terms = null;
$cc_post_id = null;

if (is_category()) {
    $term = get_queried_object();
    $terms = array($term->term_id);
} elseif (is_single()) {
    $post = get_queried_object();
    $terms = wp_get_post_categories($post->ID);
}

if (!empty($terms)) {
    foreach ($terms as $term_id) {
        $cc_post_id = $wpdb->get_var($wpdb->prepare("
            SELECT {$wpdb->posts}.ID FROM {$wpdb->terms} 
            JOIN {$wpdb->term_taxonomy} ON {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id AND {$wpdb->term_taxonomy}.taxonomy = 'category'
            JOIN {$wpdb->term_relationships} ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
            JOIN {$wpdb->posts} ON {$wpdb->term_relationships}.object_id = {$wpdb->posts}.ID AND post_type = 'category_info'
            WHERE {$wpdb->terms}.term_id = {$term_id}
        ", ""));
        if (!empty($cc_post_id)) {
            break;
        }
    }
}
}
1
Dave Bergschneider

Не уверен, что произошло изменение в 4.7, но wp_get_post_categories возвращает массив категории objects , а не ID, поэтому при циклическом переключении $terms$term_id фактически является объектом.

Добавьте аргумент 'fields' => 'ids' к вызову wp_get_post_categories-, и все будет в порядке - вместо него будет возвращен массив идентификаторов категорий .

$terms = wp_get_post_categories($post->ID, ['fields' => 'ids']);
0
Emil