WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Получай пассивный доход от сайта с помощью браузерных PUSH уведомлений

Скрипт автоматического пересчета кол-ва записей в рубриках.

Проблема: при импорте постов, которые могут принадлежать к нескольким рубрикам (т.е. один пост может находиться в нескольких рубриках) таблица wp_term_taxonomy в поле 'count' содержит нулевые значения для рубрик импортируемых постов.

При этом на сайте в рубриках посты появляются.

Решением проблемы служит функция: wp_update_term_count().

Я её использую очень топорно -> получаю в phpmyadmin из таблицы wp_term_taxonomy все ID пустых категорий (count = 0) и потом в скрипте на сайте запускаю.

wp_update_term_count( array(1,2,3,4,5 и все полученные ID), 'category' );

Подскажите, пожалуйста, как автоматизировать этот процесс в виде отдельного скрипта, который я бы запускал на сайте (например загрузкой отдельной страницы) и в итоге обновлялись бы все таксономии (категории) у которых count = 0.

PHP практически не знаю, отсюда и вопрос.

Теоретически я вижу процесс так:

  1. Получить в массив все имеющиеся таксономии (категории)
  2. Выбрать из них те, у которых count = 0
  3. Передать эти все значения (ID нулевых) в функцию wp_update_term_count()
  4. Запустить все это дело по загрузке отдельной страницы
0
Infernal_Rain
2 месяца назад
  • 0
    kolshix677 paxtoy.com

    Код пишу без проверки, сейчас нет возможности потестировать. Набросал на скорую как вижу.

    1 вариант
    https://wp-kama.ru/function/get_terms

    // все IDs терминов из выбранной таксономии 
    $terms = get_terms( 'my_taxonomy' );
    
    if( $terms && ! is_wp_error($terms) ){
    	foreach( $terms as $term ){
    		// сбор массива 
    		if ( $term->count == 0 ) {
    				$array_term_ids[] = $term->term_id;
    		}
    	}
    }
    
    wp_update_term_count( $array_term_ids , 'category' );
    

    код можете поместить в отдельный шаблон страницы (page) и сделать его приватным - таксономию нужно менять через код страницы

    2 сделать простую форму на приватной странице

    <form action="" method="POST">
    	<input type="text" name="update_term" size="60" maxlength="200" value="">
    	<input type="submit" value="Let's go">
    </form>
    
    <?php 
    if( !empty( $_POST['update_term'] ) ) {
    	$terms = get_terms( $_POST['update_term'] );
    	if( $terms && ! is_wp_error($terms) ){
    		foreach( $terms as $term ){
    			// сбор массива 
    			if ( $term->count == 0 ) {
    				$array_term_ids[] = $term->term_id;
    			}
    		}}
    
    	wp_update_term_count( $array_term_ids , $_POST['update_term'] );
    }
    
    ?>
    Комментировать
  • 0

    Как именно происходит импорт?

    Почему нельзя обновлять счетчики руками после завершения импорта если твой способ работает, зачем что то менять?

    Предполагаю что ты просто неправильно импортируешь посты, возможно как то сам лезешь в базу... но если ты уже пользуешься wordpress то изучи и используй его встроенные функции. Например эту https://wp-kama.ru/function/wp_insert_post

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация