У меня есть плагин, который пока не имеет никакой функциональности. Это текущая структура:
<?php
class Test
{
public function __construct()
{
}
}
$wpTest = new Test();
Я хочу использовать Углеродные поля Плагин WordPress. После его установки я изменил структуру согласно инструкции с сайта, только с адаптацией к ООП.
<?php
use Carbon_Fields\Container;
use Carbon_Fields\Field;
class Test
{
public function __construct()
{
add_action( 'carbon_fields_register_fields', array( $this, 'crb_attach_theme_options') );
add_action( 'after_setup_theme', array( $this , 'crb_load' ) );
}
public function crb_load()
{
require_once( 'vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
}
public function crb_attach_theme_options()
{
Container::make( 'theme_options', __( 'Plugin Options', 'crb' ) )
->add_fields( array(
Field::make( 'text', 'crb_text', 'Text Field' ),
) );
}
}
$wpTest = new Test();
Это не работает. Как мне это исправить?
Я нашел ответ на свой вопрос. Со стороны проблема была в том, что я подключил vendor/autoload.php
после доступа к __construct()
,
Пример решения этой задачи ниже
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();
ответ Исходя из вопросов, сам автор может работать для своих собственных конкретных целей.
Но если вы долго продвигаетесь, этот вопрос может привести к тому, что вы захотите интегрировать углеродные поля в свой собственный плагин (из-за вербализации этого вопроса). В этом случае есть (по крайней мере) одна проблема, о которой вам следует знать, а именно, в какой точке доступны данные ваших Углеродных полей; в случае, если вы хотите получить данные Carbon Fields во время выполнения вашего плагина.
TL; DR: В carbon_fields_fields_registered
Хук действия — самая ранняя фаза, в которой вы можете получить значение Углеродных полей. Эти поля сначала должны быть определены в carbon_fields_register_fields
действие крюк. Для дополнительных объяснений вы также можете посмотреть на этот ответ.
Итак, вот начальная загрузка, которая гарантирует правильное время:
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();