usa Carbon Fields en una clase de plugin personalizada

Tengo un complemento que no tiene funcionalidad hasta el momento. Esta es la estructura actual:

<?php class Test { public function __construct() { } } $wpTest = new Test(); 

Quiero usar el plugin WordPress de Carbon Fields . Después de instalarlo, cambié la estructura de acuerdo con las instrucciones del sitio web, solo con la adaptación a OOP.

 add_fields( array( Field::make( 'text', 'crb_text', 'Text Field' ), ) ); } } $wpTest = new Test(); 

No funciona. ¿Cómo lo arreglo?

Encontré la respuesta a mi pregunta. De la parte, el problema fue que conecté el vendor/autoload.php luego de acceder al __construct() .

Un ejemplo de cómo resolver esta tarea a continuación

 use Carbon_Fields\Container; use Carbon_Fields\Field; class PluginOption { public function __construct() { require_once( 'vendor/autoload.php' ); \Carbon_Fields\Carbon_Fields::boot(); add_action( 'carbon_fields_register_fields', array( $this, 'crb_attach_theme_options') ); } public function crb_attach_theme_options() { Container::make( 'theme_options', __( 'Plugin Option', 'crb' ) ) ->add_fields( array( Field::make( 'text', 'crb_text', 'Text Field' ), ) ); } } $wpTest = new PluginOption(); 

La respuesta del autor de las preguntas puede funcionar para su propio propósito específico.

Pero si se te ocurre esta pregunta, es probable que quieras integrar Carbon Fields en tu propio complemento (debido a la verbalización de esta pregunta). En este caso, hay (al menos) un problema que debe tener en cuenta, a saber, el punto en el que los datos de sus Carbon Fields están disponibles; en caso de que quiera recuperar los datos de Carbon Fields en el momento en que ocurre la ejecución de su complemento.

TL; DR: en carbon_fields_fields_registered action hook es la fase más temprana en la que puede obtener un valor de Carbon Fields. Estos campos primero deben definirse en el gancho de acción carbon_fields_register_fields . Para explicaciones adicionales, también puede echarle un vistazo a esta respuesta .

Así que aquí hay un progtwig de arranque que asegura tener un tiempo apropiado:

 use Carbon_Fields\Container; use Carbon_Fields\Field; class YourFancyPlugin { public function __construct() { add_action( 'after_setup_theme', array( $this, 'load_carbon_fields' ) ); add_action( 'carbon_fields_register_fields', array( $this, 'register_carbon_fields' ) ); /* will succesfuly retrieve the data of the fields registered at * carbon_fields_register_fields action hook * if you retrieve the data before carbon_fields_fields_registered action hook * has fired it won't work */ add_action( 'carbon_fields_fields_registered', array( $this, // picked this name only to emphasize whats going on 'carbon_fields_values_are_available' ) ); /* do all the stuff that doesn't rely on values of your Carbon Fields */ } public function load_carbon_fields() { require_once 'vendor/autoload.php'; // modify depending on your actual setup \Carbon_Fields\Carbon_Fields::boot(); } public function register_carbon_fields() { Container::make( 'theme_options', 'YourFancyPlugin options' ) -> add_fields( array( Field::make( 'text', 'YourFancyPlugin_option_1') ) ); } public function carbon_fields_values_are_available() { /* retrieve the values of your Carbon Fields related to your plugin */ var_dump( carbon_get_theme_option( 'YourFancyPlugin_option_1' ) ); /* do all the stuff that does rely on values of your Carbon Fields */ } } new YourFancyPlugin();