このコードは過去2年間機能していましたが、最新のWordPressを4.7にアップデートした後は、これでうまくいきませんでした。
WordPressがエラーをスローキャッチ可能な致命的なエラー:クラスstdClassのオブジェクトはこの行であることを起こるfunctions.phpの行42で文字列に変換することができませんでした:
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;
}
}
}
}
4.7で変更があったかどうかはわかりませんが、wp_get_post_categories
はIDではなくカテゴリ objects の配列を返すので、$terms
をループすると、$term_id
は実際にはオブジェクトです。
引数'fields' => 'ids'
をwp_get_post_categories
- callに追加してください。そうすればよいでしょう - 代わりにカテゴリIDの配列を返すでしょう 。
$terms = wp_get_post_categories($post->ID, ['fields' => 'ids']);