CMB2 Documentation
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Hooks
  • Download Docs
  • Github

Packages

  • CMB2
  • Demo
    • CMB2
  • None
  • Tests
    • CMB2

Classes

  • CMB2
  • CMB2_Ajax
  • CMB2_Base
  • CMB2_Bootstrap_2101
  • CMB2_Boxes
  • CMB2_Display_Checkbox
  • CMB2_Display_Colorpicker
  • CMB2_Display_File
  • CMB2_Display_File_List
  • CMB2_Display_Multicheck
  • CMB2_Display_oEmbed
  • CMB2_Display_Select
  • CMB2_Display_Taxonomy_Multicheck
  • CMB2_Display_Taxonomy_Radio
  • CMB2_Display_Text_Date
  • CMB2_Display_Text_Date_Timezone
  • CMB2_Display_Text_Money
  • CMB2_Display_Text_Time
  • CMB2_Display_Text_Url
  • CMB2_Display_Textarea
  • CMB2_Display_Textarea_Code
  • CMB2_Field
  • CMB2_Field_Display
  • CMB2_Hookup
  • CMB2_Hookup_Base
  • CMB2_Integration_Box
  • CMB2_JS
  • CMB2_Option
  • CMB2_Options
  • CMB2_Options_Hookup
  • CMB2_REST
  • CMB2_REST_Controller
  • CMB2_REST_Controller_Boxes
  • CMB2_REST_Controller_Fields
  • CMB2_Sanitize
  • CMB2_Show_Filters
  • CMB2_Type_Base
  • CMB2_Type_Checkbox
  • CMB2_Type_Colorpicker
  • CMB2_Type_Counter_Base
  • CMB2_Type_File
  • CMB2_Type_File_Base
  • CMB2_Type_File_List
  • CMB2_Type_Multi_Base
  • CMB2_Type_Multicheck
  • CMB2_Type_Oembed
  • CMB2_Type_Picker_Base
  • CMB2_Type_Radio
  • CMB2_Type_Select
  • CMB2_Type_Select_Timezone
  • CMB2_Type_Taxonomy_Base
  • CMB2_Type_Taxonomy_Multicheck
  • CMB2_Type_Taxonomy_Multicheck_Hierarchical
  • CMB2_Type_Taxonomy_Radio
  • CMB2_Type_Taxonomy_Radio_Hierarchical
  • CMB2_Type_Taxonomy_Select
  • CMB2_Type_Taxonomy_Select_Hierarchical
  • CMB2_Type_Text
  • CMB2_Type_Text_Date
  • CMB2_Type_Text_Datetime_Timestamp
  • CMB2_Type_Text_Datetime_Timestamp_Timezone
  • CMB2_Type_Text_Time
  • CMB2_Type_Textarea
  • CMB2_Type_Textarea_Code
  • CMB2_Type_Title
  • CMB2_Type_Wysiwyg
  • CMB2_Types
  • CMB2_Utils

Hooks

  • Hook Reference
  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  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 
<?php
/**
 * CMB colorpicker field type
 *
 * @since  2.2.2
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 */
class CMB2_Type_Colorpicker extends CMB2_Type_Text {

    /**
     * The optional value for the colorpicker field
     *
     * @var string
     */
    public $value = '';

    /**
     * Constructor
     *
     * @since 2.2.2
     *
     * @param CMB2_Types $types Object for the field type.
     * @param array      $args  Array of arguments for the type.
     * @param string     $value Value that the field type is currently set to, or default value.
     */
    public function __construct( CMB2_Types $types, $args = array(), $value = '' ) {
        parent::__construct( $types, $args );
        $this->value = $value ? $value : $this->value;
    }

    /**
     * Render the field for the field type.
     *
     * @since 2.2.2
     *
     * @param array $args Array of arguments for the rendering.
     *
     * @return CMB2_Type_Base|string
     */
    public function render( $args = array() ) {
        $meta_value = $this->value ? $this->value : $this->field->escaped_value();

        $meta_value = self::sanitize_color( $meta_value );

        wp_enqueue_style( 'wp-color-picker' );

        $args = wp_parse_args( $args, array(
            'class' => 'cmb2-text-small',
        ) );

        $args['class']          .= ' cmb2-colorpicker';
        $args['value']           = $meta_value;
        $args['js_dependencies'] = array( 'wp-color-picker' );

        if ( $this->field->options( 'alpha' ) ) {
            $args['js_dependencies'][] = 'wp-color-picker-alpha';
            $args['data-alpha']        = 'true';
        }

        $args = wp_parse_args( $this->args, $args );

        return parent::render( $args );
    }

    /**
     * Sanitizes the given color, or array of colors.
     *
     * @since 2.9.0
     *
     * @param string|array $color The color or array of colors to sanitize.
     *
     * @return string|array The color or array of colors, sanitized.
     */
    public static function sanitize_color( $color ) {

        if ( is_array( $color ) ) {

            $color = array_map( array( 'CMB2_Type_Colorpicker', 'sanitize_color' ), $color );

        } else {

            // Regexp for hexadecimal colors
            $hex_color = '(([a-fA-F0-9]){3}){1,2}$';

            if ( preg_match( '/^' . $hex_color . '/i', $color ) ) {
                // Value is just 123abc, so prepend #
                $color = '#' . $color;
            } elseif (
                // If value doesn't match #123abc...
                ! preg_match( '/^#' . $hex_color . '/i', $color )
                // And value doesn't match rgba()...
                && 0 !== strpos( trim( $color ), 'rgba' )
            ) {
                // Then sanitize to just #.
                $color = '#';
            }

        }

        return $color;
    }

    /**
     * Provide the option to use a rgba colorpicker.
     *
     * @since 2.2.6.2
     */
    public static function dequeue_rgba_colorpicker_script() {
        if ( wp_script_is( 'jw-cmb2-rgba-picker-js', 'enqueued' ) ) {
            wp_dequeue_script( 'jw-cmb2-rgba-picker-js' );
            CMB2_JS::register_colorpicker_alpha( true );
        }
    }

}
CMB2 Documentation API documentation generated by ApiGen