我在自定义插件中使用carbon fields来创建一些字段。在那里,我需要几个不同的领域与用户可以从一个woocommerce产品类别列表中选择类别。所以我为此制作了我的代码
<?php
use Carbon_Fields\Container;
use Carbon_Fields\Field;
Class asd_plugin_Settings {
function __construct() {
add_action( 'init', array($this, 'get_cats') );
add_action( 'carbon_fields_register_fields', array($this,'crb_attach_theme_options') );
add_action( 'after_setup_theme', array($this,'make_crb_load') );
}
public function crb_attach_theme_options() {
Container::make( 'theme_options', __( 'Theme Options', 'crb' ) )
->add_fields( array(
Field::make( "multiselect", "crb_available_cats", "Category" )
->add_options( $this->get_product_cats() ),
) );
}
public function make_crb_load() {
require_once( ASD_PLUGIN_PATH . '/carbon-fields/vendor/autoload.php' );
\Carbon_Fields\Carbon_Fields::boot();
}
public function get_cats() {
$categories = get_terms( 'product_cat', 'orderby=name&hide_empty=0' );
$cats = array();
if ( $categories )
foreach ( $categories as $cat )
$cats[$cat->term_id] = esc_html( $cat->name );
print_r($cats); //getting category properly
}
public function get_product_cats() {
$categories = get_terms( 'product_cat', 'orderby=name&hide_empty=0' );
$cats = array();
if ( $categories )
foreach ( $categories as $cat )
$cats[$cat->term_id] = esc_html( $cat->name );
return $cats; //not getting category. Showing error invalid taxonomy
}
}
在这里你可以看到我在init钩子中获得相同的类别,但在after_setup_theme钩子中我没有得到这些类别。
除了after_setup_theme钩子之外,碳场也无法正常工作。那么我怎样才能在我的领域中获得类别和产品呢?
答案 0 :(得分:0)
披露:我是Carbon Fields的前维护者(最高2.2)。
由于大多数帖子类型和分类法在WordPress请求生命周期的早期阶段都不可用,因此您需要使用可调用而不是将结果直接传递给add_options()
。有关您更喜欢使用callables的更多原因,请参阅NB! Performance implications
部分:
https://carbonfields.net/docs/fields-select/?crb_version=2-2-0
所以你的代码应该是这样的:
Container::make( 'theme_options', __( 'Theme Options', 'crb' ) )
->add_fields( array(
Field::make( "multiselect", "crb_available_cats", "Category" )
->add_options( array( $this, 'get_product_cats' ) ),
) );
这样,callable将在生命周期的后期被调用(并且只在需要时调用,而不是在每个请求时调用)。