Фиксирующее количество категорий
Каким-то образом количество моих сообщений неверно из-за вставки строк через php. У меня есть следующий код для обновления подсчета, правильно ли это?
global $wpdb;
$result = mysql_query("SELECT term_id,term_taxonomy_id FROM $wpdb->term_taxonomy where taxonomy = 'category'");
while ($row = mysql_fetch_array($result)) {
$term_taxonomy_id = $row['term_taxonomy_id'];
$countresult = mysql_query("SELECT object_id FROM $wpdb->term_relationships WHERE object_id IN (SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish') AND term_taxonomy_id = '$term_taxonomy_id'");
$count = mysql_num_rows($countresult);
mysql_query("UPDATE $wpdb->term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term_taxonomy_id'");
}
4 answers
Если вы просто хотите обновить количество сообщений в каждом термине, wp_update_term_count_now( $terms, $taxonomy )
следует это сделать... просто передайте затронутые термины в виде массива и запустите его один раз для каждой имеющейся у вас таксономии.
Вы также можете позвонить wp_defer_term_counting( true )
перед вставкой новых строк, а затем после добавления своих записей, чтобы узнать количество, позвонив wp_defer_term_counting( false )
.
Есть sql-скрипт, написанный кем-то другим, который выполняет эту работу - обновления учитываются для категорий продуктов в woocommerce или любых других категориях.
Для запуска также требуется всего несколько секунд:
Пример ответа goldenapples:
$update_taxonomy = 'my_taxonomy';
$get_terms_args = array(
'taxonomy' => $update_taxonomy,
'fields' => 'ids',
'hide_empty' => false,
);
$update_terms = get_terms($get_terms_args);
wp_update_term_count_now($update_terms, $update_taxonomy);
На мой взгляд, лучший способ сделать это - использовать WP-CLI. Для этого есть команда:
$ wp term recount category
Найти документацию здесь: https://developer.wordpress.org/cli/commands/term/recount/