__( 'Custom Fonts', 'themeisle-companion' ),
'singular_name' => __( 'Font', 'themeisle-companion' ),
'menu_name' => _x( 'Custom Fonts', 'Admin menu name', 'themeisle-companion' ),
'search_items' => __( 'Search Fonts', 'themeisle-companion' ),
'all_items' => __( 'All Fonts', 'themeisle-companion' ),
'parent_item' => __( 'Parent Font', 'themeisle-companion' ),
'parent_item_colon' => __( 'Parent Font:', 'themeisle-companion' ),
'edit_item' => __( 'Edit Font', 'themeisle-companion' ),
'update_item' => __( 'Update Font', 'themeisle-companion' ),
'add_new_item' => __( 'Add New Font', 'themeisle-companion' ),
'new_item_name' => __( 'New Font Name', 'themeisle-companion' ),
'not_found' => __( 'No fonts found', 'themeisle-companion' ),
);
$args = array(
'hierarchical' => false,
'labels' => $labels,
'public' => false,
'show_in_nav_menus' => false,
'show_ui' => true,
'capabilities' => array( 'edit_theme_options' ),
'query_var' => false,
'rewrite' => false,
);
register_taxonomy(
'obfx_custom_fonts',
array(),
$args
);
}
/**
* Add custom fonts taxonomy to menu.
*
* @since 2.10
* @return void
*/
public function add_to_menu() {
add_submenu_page(
'themes.php',
__( 'Custom Fonts', 'themeisle-companion' ),
__( 'Custom Fonts', 'themeisle-companion' ),
'edit_theme_options',
'edit-tags.php?taxonomy=obfx_custom_fonts'
);
}
/**
* Edit custom font form fields.
* It hides the description and slug fields and it changes the description for the name field.
*
* @since 2.10
* @return void
*/
public function edit_custom_font_form() {
global $parent_file, $submenu_file;
if ( 'edit-tags.php?taxonomy=obfx_custom_fonts' === $submenu_file ) {
$parent_file = 'themes.php'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
}
if ( get_current_screen()->id != 'edit-obfx_custom_fonts' ) {
return;
} ?>
font_file_new_field( 'font_woff_2', __( 'Font .woff2', 'themeisle-companion' ), __( 'Upload the font\'s woff2 file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_new_field( 'font_woff', __( 'Font .woff', 'themeisle-companion' ), __( 'Upload the font\'s woff file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_new_field( 'font_ttf', __( 'Font .ttf', 'themeisle-companion' ), __( 'Upload the font\'s ttf file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_new_field( 'font_eot', __( 'Font .eot', 'themeisle-companion' ), __( 'Upload the font\'s eot file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_new_field( 'font_svg', __( 'Font .svg', 'themeisle-companion' ), __( 'Upload the font\'s svg file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_new_field( 'font_otf', __( 'Font .otf', 'themeisle-companion' ), __( 'Upload the font\'s otf file or enter the URL.', 'themeisle-companion' ) );
$this->select_new_field(
'font-display',
__( 'Font Display', 'themeisle-companion' ),
__( 'Select font-display property for this font', 'themeisle-companion' ),
array(
'auto' => 'auto',
'block' => 'block',
'swap' => 'swap',
'fallback' => 'fallback',
'optional' => 'optional',
)
);
}
/**
* Add Taxonomy data field
*
* @param int $id current term id.
* @param string $title font type title.
* @param string $description title font type description.
* @param string $value title font type meta values.
*
* @since 2.10
* @return void
*/
protected function font_file_new_field( $id, $title, $description, $value = '' ) {
echo '
';
}
/**
* Render select field for the new font screen.
*
* @param string $id Field ID.
* @param string $title Field Title.
* @param string $description Field Description.
* @param array $select_fields Select fields as Array.
*
* @since 2.10
* @return void
*/
protected function select_new_field( $id, $title, $description, $select_fields ) {
echo '';
echo '';
echo '';
foreach ( $select_fields as $key => $value ) {
echo '';
}
echo '';
echo '
';
}
/**
* Edit Taxonomy data
*
* @param object $term taxonomy terms.
*
* @since 2.10
* @return void
*/
public function edit_taxonomy_data( $term ) {
$data = self::get_font_links( $term->term_id );
$this->font_file_edit_field( 'font_woff_2', __( 'Font .woff2', 'themeisle-companion' ), $data['font_woff_2'], __( 'Upload the font\'s woff2 file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_edit_field( 'font_woff', __( 'Font .woff', 'themeisle-companion' ), $data['font_woff'], __( 'Upload the font\'s woff file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_edit_field( 'font_ttf', __( 'Font .ttf', 'themeisle-companion' ), $data['font_ttf'], __( 'Upload the font\'s ttf file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_edit_field( 'font_eot', __( 'Font .eot', 'themeisle-companion' ), $data['font_eot'], __( 'Upload the font\'s eot file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_edit_field( 'font_svg', __( 'Font .svg', 'themeisle-companion' ), $data['font_svg'], __( 'Upload the font\'s svg file or enter the URL.', 'themeisle-companion' ) );
$this->font_file_edit_field( 'font_otf', __( 'Font .otf', 'themeisle-companion' ), $data['font_otf'], __( 'Upload the font\'s otf file or enter the URL.', 'themeisle-companion' ) );
$this->select_edit_field(
'font-display',
__( 'Font Display', 'themeisle-companion' ),
$data['font-display'],
__( 'Select font-display property for this font', 'themeisle-companion' ),
array(
'auto' => 'Auto',
'block' => 'Block',
'swap' => 'Swap',
'fallback' => 'Fallback',
'optional' => 'Optional',
)
);
}
/**
* Add Taxonomy data field
*
* @param int $id current term id.
* @param string $title font type title.
* @param string $value title font type meta values.
* @param string $description title font type description.
*
* @since 2.10
* @return void
*/
protected function font_file_edit_field( $id, $title, $value = '', $description ) {
echo '';
echo '| ';
echo '';
echo ' | ';
echo '';
echo '';
echo '';
esc_html_e( 'Upload', 'themeisle-companion' );
echo '';
echo ' ';
echo esc_html( $description );
echo ' ';
echo ' | ';
echo '
';
}
/**
* Render select field for the edit font screen.
*
* @param string $id Field ID.
* @param string $title Field Title.
* @param string $saved_val Field Value.
* @param string $description Field Description.
* @param array $select_fields Select fields as Array.
*
* @since 2.10
* @return void
*/
private function select_edit_field( $id, $title, $saved_val = '', $description, $select_fields ) {
echo '';
echo '| ';
echo '';
echo ' | ';
echo '';
echo '';
foreach ( $select_fields as $key => $value ) {
echo '';
}
echo '';
echo ' ';
echo esc_html( $description );
echo ' ';
echo ' | ';
echo '
';
}
/**
* Save Taxonomy meta data value
*
* @param int $term_id current term id.
*
* @since 2.10
* @return bool
*/
public function save_metadata( $term_id ) {
if ( ! current_user_can( 'manage_options' ) ) {
return false;
}
if ( isset( $_POST['obfx_custom_fonts'] ) ) {// phpcs:ignore WordPress.Security.NonceVerification.Missing
$return_val = array();
foreach ( $_POST['obfx_custom_fonts'] as $key => $value ) {
if ( $key === 'font-display' ) {
$return_val[ $key ] = esc_attr( $value );
continue;
}
$return_val[ $key ] = esc_url( $value );
}
self::update_font_links( $return_val, $term_id );
}
return true;
}
/**
* Update font data from name
*
* @param array $posted custom font data.
* @param int $term_id custom font term id.
*
* @since 2.10
* @return void
*/
public static function update_font_links( $posted, $term_id ) {
$links = self::get_font_links( $term_id );
foreach ( array_keys( $links ) as $key ) {
if ( isset( $posted[ $key ] ) ) {
$links[ $key ] = $posted[ $key ];
} else {
$links[ $key ] = '';
}
}
update_option( "taxonomy_obfx_custom_fonts_{$term_id}", $links );
}
/**
* Get font links
*
* @param int $term_id custom font term id.
*
* @since 2.10
* @return array
*/
public static function get_font_links( $term_id ) {
$links = get_option( "taxonomy_obfx_custom_fonts_{$term_id}", array() );
return self::default_args( $links );
}
/**
* Default fonts
*
* @param array $fonts fonts array of fonts.
*
* @since 2.10
* @return array
*/
protected static function default_args( $fonts ) {
return wp_parse_args(
$fonts,
array(
'font_woff_2' => '',
'font_woff' => '',
'font_ttf' => '',
'font_svg' => '',
'font_eot' => '',
'font_otf' => '',
'font-display' => 'swap',
)
);
}
/**
* Allowed mime types and file extensions
*
* @param array $mimes Current array of mime types.
*
* @since 2.10
* @return array
*/
public function add_fonts_to_allowed_mimes( $mimes ) {
$mimes['woff'] = 'application/x-font-woff';
$mimes['woff2'] = 'application/x-font-woff2';
$mimes['ttf'] = 'application/x-font-ttf';
$mimes['svg'] = 'image/svg+xml';
$mimes['eot'] = 'application/vnd.ms-fontobject';
$mimes['otf'] = 'font/otf';
return $mimes;
}
/**
* Correct the mome types and extension for the font types.
*
* @param array $defaults File data array containing 'ext', 'type', and 'proper_filename' keys.
* @param string $file Full path to the file.
* @param string $filename The name of the file (may differ from $file due to
* $file being in a tmp directory).
* @since 2.10
* @return array
*/
public function update_mime_types( $defaults, $file, $filename ) {
if ( 'ttf' === pathinfo( $filename, PATHINFO_EXTENSION ) ) {
$defaults['type'] = 'application/x-font-ttf';
$defaults['ext'] = 'ttf';
}
if ( 'otf' === pathinfo( $filename, PATHINFO_EXTENSION ) ) {
$defaults['type'] = 'application/x-font-otf';
$defaults['ext'] = 'otf';
}
return $defaults;
}
}