首先我下载了https://carbonfields.net/zip/latest/并在WP后端安装了该插件。我也把它激活了。
对于这个测试用例,我使用" Twenty Sixteen"模板与新的WordPress安装没有安装任何其他插件,并根据documentation page of Carbon Fields我将以下代码添加到我的functions.php文件的顶部:
<?php // PHP 7
use Carbon_Fields\Container;
use Carbon_Fields\Field;
add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' );
function crb_attach_theme_options() {
Container::make( 'theme_options', 'Theme Options' )
-> set_page_menu_position( 0 )
-> add_fields( array(
Field::make( 'text', 'crb_text')
) );
}
到目前为止,一切看起来都很好,因为&#34;主题选项&#34;出现在WP后端,就像预期一样。
现在我尝试按如下方式检索字段值crb_text
:
// this snippet starts exactly where the previous one ended
add_action( 'after_setup_theme', 'crb_load' );
function crb_load() {
// require_once( ABSPATH . '/vendor/autoload.php' ); original from website throws: "Failed opening required" so modified to:
require_once( ABSPATH . 'wp-content/plugins/carbon-fields/vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
var_dump( carbon_get_theme_option( 'crb_text' ) ); // -> string(0) ""
var_dump( carbon_get_theme_option( '_crb_text' ) ); // -> string(0) "" isn't actually the right way to do it but give it a try for testing purpose
var_dump( get_option( '_crb_text' ) ); // -> string(4) "test"
}
正如您所看到的,我能够通过调用get_option( '_crb_text' )
来检索数据,这是本机WP方式,但插件函数carbon_get_theme_option( 'crb_text' )
不起作用。实际上,对于&#34;简单的字段&#34;但是有复杂的领域&#34;必须由插件自己的函数检索,在这种情况下为carbon_get_theme_option()
。
我也看过这个问题:use Carbon Fields in custom plugin class。但这个问题结束了我的开始。
提前谢谢你......
PS:我以前和Carbon Fields 1.6一起使用,它的设置非常相似,但是想要升级到分支2。我的环境:define('WP_DEBUG', true);
,Carbon Fields 2.1.0,WordPress 4.8.2-de_DE(没有其他插件而不是Carbon Fields的全新安装),Twenty Sixteen 1.3,PHP 7
答案 0 :(得分:0)
这是我与其中一位插件作者之间聊天的引用&#34; Atanas Angelov&#34;:
您好@Elstermann您无法获得该值,因为要获得字段值,必须先定义它。所有字段都在carbon_fields_fields_registered钩子中定义,因此在该钩子被触发之前的任何carbonget *调用都不起作用(因为尚未定义任何字段)。
所以这里有一个确认的方法来引导碳场:
use Carbon_Fields\Container;
use Carbon_Fields\Field;
add_action( 'carbon_fields_register_fields', 'crb_attach_theme_options' );
function crb_attach_theme_options() {
Container::make( 'theme_options', 'Theme Options' ) -> add_fields( array(
Field::make( 'text', 'crb_text')
) );
}
add_action( 'after_setup_theme', 'crb_load' );
function crb_load() {
require_once( ABSPATH . 'wp-content/plugins/carbon-fields/vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
}
add_action( 'carbon_fields_fields_registered', 'crb_values_are_avail' );
function crb_values_are_avail() {
var_dump( carbon_get_theme_option( 'crb_text' ) ); // -> string(0) "test"
}
这里只是强调核心问题......那是对上面代码片段的回复:
是的 -
carbon_fields_fields_registered
应该是最早获得字段值的
仅当您要在主题文件之前检索数据时,这才有意义,因为加载主题文件时carbon_fields_fields_registered
操作挂钩已被触发。所以在您的主题文件中,只需调用即可:
carbon_get_theme_option( 'your_name_of_a_carbon_field' );
// for example in the "header.php" in your theme directory you could use
<style>body{background-color:<?php
echo carbon_get_theme_option( 'custom_body_background' );
?>}</style> // just to give a real life like example
所有&#34; carbon_get _ *&#34; carbon_get_post_meta()
,carbon_get_term_meta()
,carbon_get_user_meta()
,carbon_get_comment_meta()
等功能。
如果您想要在主题文件之前检索数据,请确保在carbon_fields_fields_registered
动作挂钩上发生这种情况,或者已经解雇了挂钩。
如果你开发一个WP插件,你可以在其中集成Carbon Fields(对我来说这是真的)。当你引导你的插件时,carbon_fields_fields_registered
动作挂钩并没有发生,所以一定要有正确的时机。
正如问题中所述,您也可以使用:
get_option( '_your_field_name_prepended_by_lodash' )
当您想要检索由以下项设置的数据时:
Container::make( 'theme_options', 'Theme Options' ) -> add_fields()
但这有以下缺点:
Field::make(...)->set_default_value( $default_value )
设置的值(与Carbon Fields方法相比)。