Short description: 我已经创建了一组术语,并使用下面的SQL代码将它们附加到某个自定义帖子的现有分类法中。完成此操作后,我想更新wp\\u term\\u分类法。计数我将其设置为0(哑?)因此,新的术语没有出现在搜索表单中(但它们确实出现在个人自定义帖子中)。将count设置为1可以修复此问题,但仍然“错误”,我担心这可能会导致后续问题。
虽然我的代码略高于n00b状态,但SQL或Wordpress中的答案仍然有效。
My solution: 设置wp\\U term\\u分类法。对于新术语,计数为1,这样它就会出现在整个网站上。我可以在搜索中使用它们(很重要),但标记云大小错误/不正确(很好),我担心会遇到未知问题。
Details: 我已经为一个名为“jeans”的自定义帖子类型创建了一个名为“csf\\U brand”的分类法,我正在添加许多术语。与其编辑已经创建的数百篇自定义帖子中的每一篇,我想我应该使用SQL对它们进行批处理,使用与自定义分类相关的3个表。
首先,我创建我的新术语。
INSERT INTO `wp_nhyb_terms` (`term_id`, `name`, `slug`, `term_group`) VALUES
(10, \'GAP\', \'gap\', 0); --there\'s a bunch more lines like this adding in new terms
接下来,我将我的术语附加到适当的分类法中。0不是正确的计数,但如果可以避免的话,计算它不是我感兴趣的事情。
INSERT INTO `wp_nhyb_term_taxonomy` (`term_taxonomy_id`, `term_id`, `taxonomy`, `description`, `parent`, `count`) VALUES
(10, 10, \'csf_brand\', \'\', 0, 0); --Here is where I could use 1 instead of 0
最后,我通过post ID(object\\u ID)将术语附加到我的自定义post类型
INSERT INTO `wp_nhyb_term_relationships` (`object_id`, `term_taxonomy_id`, `term_order`) VALUES
(125, 10, 0);
这是可行的。但是wp\\U term\\U分类法。count不是0,因此它们不会出现在我的搜索中(例如,我有一个页面可以通过下拉菜单搜索品牌,但它们不是选项)。如果我在浏览器中编辑自定义帖子,则保存该帖子可识别新术语并更正计数。但这不是一个很好的过程,因为我最终会错过一些东西。
最合适的回答,由SO网友:sMyles 整理而成
您可以运行wp_update_term_count_now
执行此操作后的php函数:
https://developer.wordpress.org/reference/functions/wp_update_term_count_now/
这就叫私人
_update_post_term_count
https://developer.wordpress.org/reference/functions/_update_post_term_count/
如果查看其来源,您将看到术语计数是如何更新的(这是在后端保存帖子时完成的):
function _update_post_term_count( $terms, $taxonomy ) {
global $wpdb;
$object_types = (array) $taxonomy->object_type;
foreach ( $object_types as &$object_type )
list( $object_type ) = explode( \':\', $object_type );
$object_types = array_unique( $object_types );
if ( false !== ( $check_attachments = array_search( \'attachment\', $object_types ) ) ) {
unset( $object_types[ $check_attachments ] );
$check_attachments = true;
}
if ( $object_types )
$object_types = esc_sql( array_filter( $object_types, \'post_type_exists\' ) );
foreach ( (array) $terms as $term ) {
$count = 0;
// Attachments can be \'inherit\' status, we need to base count off the parent\'s status if so.
if ( $check_attachments )
$count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts p1 WHERE p1.ID = $wpdb->term_relationships.object_id AND ( post_status = \'publish\' OR ( post_status = \'inherit\' AND post_parent > 0 AND ( SELECT post_status FROM $wpdb->posts WHERE ID = p1.post_parent ) = \'publish\' ) ) AND post_type = \'attachment\' AND term_taxonomy_id = %d", $term ) );
if ( $object_types )
$count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = \'publish\' AND post_type IN (\'" . implode("\', \'", $object_types ) . "\') AND term_taxonomy_id = %d", $term ) );
/** This action is documented in wp-includes/taxonomy.php */
do_action( \'edit_term_taxonomy\', $term, $taxonomy->name );
$wpdb->update( $wpdb->term_taxonomy, compact( \'count\' ), array( \'term_taxonomy_id\' => $term ) );
/** This action is documented in wp-includes/taxonomy.php */
do_action( \'edited_term_taxonomy\', $term, $taxonomy->name );
}
}