Автоматически назначать категорию всем сообщениям

Как автоматически добавить / присвоить категорию ВСЕМ сообщениям?

Для блога с 1000 постами о рецептах, как бы вы автоматически добавили категорию "рецепт" ко всем постам? (Без замены текущих категорий, уже назначенных сообщению. Другими словами, каждое сообщение будет по-прежнему сохранять категории, уже назначенные, например категории "курица", "свинина" и "говядина").

Я мог бы вручную поставить галочку / пометить категорию "рецепт" в панели управления WordPress, но я ищу альтернативный метод, может быть, какой-нибудь код, который я могу поместить в functions.php?

Если есть метод, который может достичь этого...

Будет ли этот метод добавлять категорию "рецепт" как к новым, так и к старым сообщениям, или просто к новым сообщениям?

Также если у меня уже есть несколько постов в категории "рецепт"
добавит ли этот метод категорию "рецепт" ДВАЖДЫ к сообщению,
поэтому заставляет этот пост дважды появляться в категории "рецепт"?

2 ответа

Вы можете полностью создать категорию, получить ее идентификатор из URL или базы данных, заглянув в нее. Затем создайте функцию, используйте $wpdb, напишите запрос MySQL, как считаете нужным, добавив идентификатор, который вы только что получили из URL или базы данных.

Здесь может быть некоторая информация, чтобы помочь вам: http://codex.wordpress.org/Class_Reference/wpdb

Есть 3 или 4 таблицы, которые вы хотите посмотреть в своей базе данных:

wp_posts - поиск столбцов ID и post_type;

wp_terms - ищите term_id и name, чтобы увидеть, какой ID категории является вашим новым, 'recipe' в этом случае.

wp_term_taxonomy - поиск term_id и таксономии, просто чтобы убедиться, что вы будете использовать категорию.

и где происходит вся магия:

wp_terms_relationship - где object_id - это идентификатор вашего сообщения, а term_taxonomy_id - это term_taxonomy_id изwp_term_taxonomy,

Осторожно: не предполагайте, что term_id от wp_terms та же term_taxonomy_id от wp_term_taxonomy, Для каждого из них есть столбец, и для этого, безусловно, есть веская причина.

Что вы хотите сделать, это вставить здесь, wp_posts.object_id а также wp_term_taxonomy.term_taxonomy_id,


Вы можете запустить что-то вроде:

INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, your_new_category_id FROM wp_posts WHERE post_type = "your_post_type")

Замена:

your_new_category_id = вашей новой категорией term_taxonomy_id, из wp_term_taxonomy

your_post_type = между этими кавычками, post_type, если WordPress по умолчанию, заменить на "post"

Например, если у вашей новой категории есть taxonomy_id 7, а ваши посты - recipe_post:

INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, 7 FROM wp_posts WHERE post_type = "recipe_post")


"Да, чувак, но OP хочет запустить что-то в functions.php".

Это нормально:

function update_categories(){
    global $wpdb;

    if ($_GET['updateall'] == 'banana'){
        echo "updating";
        $wpdb->query("INSERT IGNORE INTO wp_term_relationships (object_id, term_taxonomy_id) (SELECT DISTINCT ID, 7 FROM wp_posts WHERE post_type = 'recipe_post')");   
    }

}
add_action('wp_loaded', 'update_categories');

Это будет зависать при каждой загрузке WordPress (обычно на каждой странице), проверяя, отправляете ли вы GETзначение равно тому, что вы хотите запустить, и хотите запустить только один раз. Поэтому замените "банан" чем-то, что вы легко можете запомнить и получить к нему доступ: http://www.yourdomain.com/?updateall=banana

и сделано!

Конечно, удалите этот хук и функцию, как только вы закончите это обновление.


Ваши вопросы:

Будет ли этот метод добавлять категорию "рецепт" как к новым, так и к старым сообщениям, или просто к новым сообщениям?

Ваш звонок, если вы хотите выбрать диапазон сообщений, вы можете добавить WHERE лайк:

WHERE post_type = 'recipe_post' AND something = 'something something' AND date = 'some-good-date'

Кроме того, если у меня уже есть несколько постов в категории "рецепт", добавит ли этот метод категорию "рецепт" ДВАЖДЫ к посту, поэтому этот пост дважды появится в категории "рецепт"?

Нет поэтому IGNORE ключевое слово сразу после INSERT,

Проверь это

http://wordpress-code-snippets.blogspot.in/2014/05/how-to-assing-category-to-post.html

Copy and Paste the Below code in you theme functions.php.

 function auto_add_category ($post_id = 0) {
 if (!$post_id) return;
 $tag_categories = array ( //  add multiple items as shown 'Tag Name' => 'Categroy Name'
   'toys' => 'Kids',
   'apple' => 'Fruits',
 );
 $post_tags = get_the_tags($post_id);
 foreach ($post_tags as $tag) {
   if ($tag_categories[$tag->name] ) {
     $cat_id = get_cat_ID($tag_categories[$tag->name]);
     if ($cat_id) {
       $result =  wp_set_post_terms( $post_id, $tags = $cat_id, $taxonomy = 'category', $append = true );
     }
   }
    }
  }
   add_action('publish_post','auto_add_category');
  ?>
Другие вопросы по тегам