WordPress углеродные поля получить список категорий и продуктов в полях плагинов - PullRequest
0 голосов
/ 28 апреля 2018

Я использую углеродные поля в своем пользовательском плагине для создания некоторых полей. Там мне нужно несколько различных полей с полем, где пользователь может выбрать категорию из списка категории продуктов 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
    }

}

Здесь вы можете видеть, что я получаю те же категории в ловушке инициализации, но в ловушке after_setup_theme я не получаю эти категории.

Углеродные поля также не работают должным образом, кроме ловушки after_setup_theme. Так, как я могу получить категории и продукты в моих областях?

1 Ответ

0 голосов
/ 09 мая 2018

Раскрытие информации: я бывший сопровождающий Carbon Fields (до 2,2).

Поскольку большинство типов записей и таксономий недоступны на ранних этапах жизненного цикла запроса WordPress, вам нужно будет использовать вызываемую функцию вместо передачи результатов непосредственно в add_options(). Смотрите раздел NB! Performance implications, чтобы узнать, почему вы предпочитаете использовать callables: 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' ) ),
    ) );

Таким образом, вызываемый объект будет вызываться намного позже в жизненном цикле (и вызываться только при необходимости, а не при каждом запросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...