Как автоматически добавить / назначить категорию ВСЕ должности?
Для блога с 1000 постами о рецептах, как бы вы автоматически добавили категорию «рецепт» ко всем постам? (Без замены текущих категорий, уже назначенных сообщению. Другими словами, каждое сообщение будет по-прежнему сохранять уже назначенные категории, такие как категории «курица», «свинина» и «говядина»).
Я мог бы вручную поставить галочку / пометить категорию «рецепт» в панели управления WordPress, но я ищу альтернативный метод, может быть, какой-нибудь код, который я могу поместить в functions.php?
Если есть метод, который может достичь этого …
Будет ли этот метод добавлять категорию «рецепт» как к новым, так и к старым сообщениям, или просто к новым сообщениям?
Также если у меня уже есть несколько постов в категории «рецепт»
добавит ли этот метод категорию «рецепт» ДВАЖДЫ к сообщению,
поэтому, заставляя этот пост появляться дважды в категории «рецепт»?
Вы можете полностью создать категорию, получить ее идентификатор из 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');
?>