использовать Carbon Fields в пользовательском классе плагинов

У меня есть плагин, который пока не имеет никакой функциональности. Это текущая структура:

<?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();

Это не работает. Как мне это исправить?

2

Решение

Я нашел ответ на свой вопрос. Со стороны проблема была в том, что я подключил 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();
2

Другие решения

ответ Исходя из вопросов, сам автор может работать для своих собственных конкретных целей.

Но если вы долго продвигаетесь, этот вопрос может привести к тому, что вы захотите интегрировать углеродные поля в свой собственный плагин (из-за вербализации этого вопроса). В этом случае есть (по крайней мере) одна проблема, о которой вам следует знать, а именно, в какой точке доступны данные ваших Углеродных полей; в случае, если вы хотите получить данные 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();
0

По вопросам рекламы [email protected]