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 
<?php
/**
 * Base class for hooking CMB2 into WordPress.
 *
 * @since  2.2.0
 *
 * @category  WordPress_Plugin
 * @package   CMB2
 * @author    CMB2 team
 * @license   GPL-2.0+
 * @link      https://cmb2.io
 *
 * @property-read string $object_type
 * @property-read CMB2   $cmb
 */
abstract class CMB2_Hookup_Base {

    /**
     * CMB2 object.
     *
     * @var   CMB2 object
     * @since 2.0.2
     */
    protected $cmb;

    /**
     * The object type we are performing the hookup for
     *
     * @var   string
     * @since 2.0.9
     */
    protected $object_type = 'post';

    /**
     * A functionalized constructor, used for the hookup action callbacks.
     *
     * @since  2.2.6
     *
     * @throws Exception Failed implementation.
     *
     * @param  CMB2 $cmb The CMB2 object to hookup.
     */
    public static function maybe_init_and_hookup( CMB2 $cmb ) {
        throw new Exception( sprintf( esc_html__( '%1$s should be implemented by the extended class.', 'cmb2' ), __FUNCTION__ ) );
    }

    /**
     * Constructor
     *
     * @since 2.0.0
     * @param CMB2 $cmb The CMB2 object to hookup.
     */
    public function __construct( CMB2 $cmb ) {
        $this->cmb = $cmb;
        $this->object_type = $this->cmb->mb_object_type();
    }

    abstract public function universal_hooks();

    /**
     * Ensures WordPress hook only gets fired once per object.
     *
     * @since  2.0.0
     * @param string   $action        The name of the filter to hook the $hook callback to.
     * @param callback $hook          The callback to be run when the filter is applied.
     * @param integer  $priority      Order the functions are executed.
     * @param int      $accepted_args The number of arguments the function accepts.
     */
    public function once( $action, $hook, $priority = 10, $accepted_args = 1 ) {
        static $hooks_completed = array();

        $args = func_get_args();

        // Get object hash.. This bypasses issues with serializing closures.
        if ( is_object( $hook ) ) {
            $args[1] = spl_object_hash( $args[1] );
        } elseif ( is_array( $hook ) && is_object( $hook[0] ) ) {
            $args[1][0] = spl_object_hash( $hook[0] );
        }

        $key = md5( serialize( $args ) );

        if ( ! isset( $hooks_completed[ $key ] ) ) {
            $hooks_completed[ $key ] = 1;
            add_filter( $action, $hook, $priority, $accepted_args );
        }
    }

    /**
     * Magic getter for our object.
     *
     * @param string $field Property to return.
     * @throws Exception Throws an exception if the field is invalid.
     * @return mixed
     */
    public function __get( $field ) {
        switch ( $field ) {
            case 'object_type':
            case 'cmb':
                return $this->{$field};
            default:
                throw new Exception( sprintf( esc_html__( 'Invalid %1$s property: %2$s', 'cmb2' ), __CLASS__, $field ) );
        }
    }
}
CMB2 Documentation API documentation generated by ApiGen