WordPress使用以下格式为每个标记云链接输出一个方便的类名.tag-link-{term_id}
. 这将允许我们根据每个术语的id来确定其目标。
此代码将为标记小部件输出的术语链接生成样式:
add_action( \'wp_head\', \'wpse_tag_colors\' );
function wpse_tag_colors() {
$terms = get_terms( [
\'taxonomy\' => \'category\',
\'hide_empty\' => false,
] );
if ( empty( $terms ) || is_wp_error( $terms ) ) {
return;
}
$output = \'<!-- Tag widget color styles -->\' . PHP_EOL;
$output .= \'<style>\' . PHP_EOL;
foreach ( $terms as $key => $term ) {
$term_color = get_term_meta( $term->term_id, \'color\', true );
if ( ! $term_color ) {
continue;
}
$output .= ".tag-link-{$term->term_id} { background-color: " .
sanitize_hex_color( $term_color ) . "; }" . PHP_EOL;
}
$output .= \'</style>\' . PHP_EOL;
$output .= \'<!-- End Tag Widget color styles -->\' . PHP_EOL;
echo $output;
}
请注意,上面的代码要求使用前面的
#
, e、 g。
#bada55
. 如果未使用哈希十六进制颜色值,则可以调整输出
background-color
相应的价值。此外,确保使用
sanitize_hex_color_no_hash()
用于消毒。
为了完整起见,下面是我用于添加和保存颜色术语元数据的代码。
// Add color field to Add new category term page.
add_action( \'category_add_form_fields\', \'wpse_category_add_form_fields\', 10, 2 );
function wpse_category_add_form_fields( $taxonomy ) { ?>
<div class="form-field term-group">
<label for="color"><?php _e( \'Term Color\', \'text_domain\' ); ?>
<input type="text" id="color" name="color" value=""/>
</label>
</div><?php
}
// Add color field to Edit category term page.
add_action( \'category_edit_form_fields\', \'wpse_category_edit_form_fields\', 10, 2 );
function wpse_category_edit_form_fields( $term, $taxonomy ) {
$term_color = get_term_meta( $term->term_id, \'color\', true ); ?>
<tr class="form-field term-group-wrap">
<th scope="row">
<label for="color">
<?php _e( \'Term Color\', \'text_domain\' ); ?>
</label>
</th>
<td>
<input type="text" id="color" name="color" value="<?php
echo sanitize_hex_color( $term_color ); ?>"/>
</td>
</tr><?php
}
// Save color for category term.
add_action( \'created_category\', \'wpse_category_save_term_color\', 10, 2 );
add_action( \'edited_category\', \'wpse_category_save_term_color\', 10, 2 );
function wpse_category_save_term_color( $term_id, $tag_id ) {
//exit ( print_r( $_POST ) );
if ( isset( $_POST[ \'color\' ] ) ) {
update_term_meta( $term_id, \'color\', sanitize_hex_color( $_POST[ \'color\' ] ) );
}
}