acf_upgrade_550_taxonomy()
acf_upgrade_550_taxonomy
Upgrades all ACF4 termmeta for a specific taxonomy.
Хуки из функции
Возвращает
null. Ничего (null).
Использование
acf_upgrade_550_taxonomy( $taxonomy );
- $taxonomy(строка) (обязательный)
- The taxonomy name.
Список изменений
| С версии 5.7.4 | Введена. |
Код acf_upgrade_550_taxonomy() acf upgrade 550 taxonomy ACF 6.4.2
function acf_upgrade_550_taxonomy( $taxonomy ) {
// log
acf_dev_log( 'ACF Upgrade 5.5.0 Taxonomy.', $taxonomy );
// global
global $wpdb;
// vars
$search = $taxonomy . '_%';
$_search = '_' . $search;
// escape '_'
// http://stackoverflow.com/questions/2300285/how-do-i-escape-in-sql-server
$search = str_replace( '_', '\_', $search );
$_search = str_replace( '_', '\_', $_search );
// search
// results show faster query times using 2 LIKE vs 2 wildcards
$rows = $wpdb->get_results(
$wpdb->prepare(
"SELECT *
FROM $wpdb->options
WHERE option_name LIKE %s
OR option_name LIKE %s",
$search,
$_search
),
ARRAY_A
);
// loop
if ( $rows ) {
foreach ( $rows as $row ) {
/**
* Use regex to find "(_)taxonomy_(term_id)_(field_name)" and populate $matches:
* Array
* (
* [0] => _category_3_color
* [1] => _
* [2] => 3
* [3] => color
* )
*/
if ( ! preg_match( "/^(_?){$taxonomy}_(\d+)_(.+)/", is_null( $row['option_name'] ) ? '' : $row['option_name'], $matches ) ) {
continue;
}
// vars
$term_id = $matches[2];
$meta_key = $matches[1] . $matches[3];
$meta_value = $row['option_value'];
// update
// memory usage reduced by 50% by using a manual insert vs update_metadata() function.
// update_metadata( 'term', $term_id, $meta_name, $meta_value );
$wpdb->insert(
$wpdb->termmeta,
array(
'term_id' => $term_id,
'meta_key' => $meta_key,
'meta_value' => $meta_value,
)
);
// log
acf_dev_log( 'ACF Upgrade 5.5.0 Term.', $term_id, $meta_key );
// action
do_action( 'acf/upgrade_550_taxonomy_term', $term_id );
}
}
// action for 3rd party
do_action( 'acf/upgrade_550_taxonomy', $taxonomy );
}