/
meta-to-term-cli.php
79 lines (66 loc) · 1.88 KB
/
meta-to-term-cli.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
if ( !defined( 'WP_CLI' ) ) return;
/**
* Migrate meta values to terms
*
* @package wp-cli
*/
class Meta_To_Term_Migration extends WP_CLI_Command {
/**
* Migrate meta values to taxonomy terms. Delete meta after import
*
* ## OPTIONS
*
* <meta-key>
* : Meta key to convert
*
* <taxonomy-slug>
* : Taxonomy to move values into
*
* [--<field>=<value>]
* : One or more args to pass to WP_Query.
*
* ## EXAMPLES
*
* wp mtt migrate meta_key taxonomy_slug
* wp mtt migrate meta_key taxonomy_slug --posts_per_page=200 --paged=2
*
*/
function migrate( $args, $assoc_args ) {
list( $meta_key, $taxonomy ) = $args;
if ( ! ( $taxonomy_object = get_taxonomy( $taxonomy ) ) ) {
WP_CLI::error( sprintf( "The taxonomy '%s' doesn't exist", $taxonomy ) );
}
$defaults = array(
'post_type' => $taxonomy_object->object_type,
'posts_per_page' => -1,
'post_status' => 'any',
);
$query_args = array_merge( $defaults, $assoc_args );
$query = new WP_Query( $query_args );
// summary
WP_CLI::log( sprintf(
"---\nPer page: %d \nPage: %d \nTotal pages: %d\n---",
$query_args['posts_per_page'],
isset( $query_args['paged'] ) ? $query_args['paged'] : 1,
$query->max_num_pages
) );
while ( $query->have_posts() ) {
$query->the_post();
$id = get_the_id();
// get meta
$metas = get_post_meta( $id, $meta_key );
// create term
if ( ! $metas ) {
WP_CLI::log( WP_CLI::colorize("%c[$id]%n No meta, skipped" ) );
} else if ( ! is_wp_error( wp_set_object_terms( $id, $metas, $taxonomy, true ) ) ) {
WP_CLI::log( WP_CLI::colorize("%g[$id]%n Migrated: " . implode( ', ', $metas ) ) );
// clean meta
delete_post_meta( $id, $meta_key );
} else {
WP_CLI::log( WP_CLI::colorize("%r[$id]%n Error: Could not set terms for post") );
}
}
}
}
WP_CLI::add_command( 'mtt', 'Meta_To_Term_Migration' );