在自定义插件中使用 Carbon Fields class
use Carbon Fields in custom plugin class
我有一个目前没有任何功能的插件。这是当前结构:
<?php
class Test
{
public function __construct()
{
}
}
$wpTest = new Test();
我想使用 Carbon Fields WordPress 插件。安装后我根据网站的说明改了结构,只是适配了OOP。
<?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();
它不起作用。我该如何解决?
我找到了问题的答案。从这一部分来看,问题是我在访问 __construct()
.
后连接了 vendor/autoload.php
下面是解决此任务的示例
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(由于这个问题的语言化)。在这种情况下,(至少)有一个问题您应该注意,即您的碳场数据可用的时间点;如果您想在执行插件时检索 Carbon Fields 数据。
TL;DR: 在 carbon_fields_fields_registered
中,动作挂钩是您可以获得碳字段值的最早阶段。这些字段首先必须在 carbon_fields_register_fields
操作挂钩中定义。有关其他说明,您还可以查看 .
所以这里有一个 bootstrap 确保有一个正确的时间:
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();
我有一个目前没有任何功能的插件。这是当前结构:
<?php
class Test
{
public function __construct()
{
}
}
$wpTest = new Test();
我想使用 Carbon Fields WordPress 插件。安装后我根据网站的说明改了结构,只是适配了OOP。
<?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();
它不起作用。我该如何解决?
我找到了问题的答案。从这一部分来看,问题是我在访问 __construct()
.
vendor/autoload.php
下面是解决此任务的示例
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(由于这个问题的语言化)。在这种情况下,(至少)有一个问题您应该注意,即您的碳场数据可用的时间点;如果您想在执行插件时检索 Carbon Fields 数据。
TL;DR: 在 carbon_fields_fields_registered
中,动作挂钩是您可以获得碳字段值的最早阶段。这些字段首先必须在 carbon_fields_register_fields
操作挂钩中定义。有关其他说明,您还可以查看
所以这里有一个 bootstrap 确保有一个正确的时间:
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();