Support

Account

Home Forums Front-end Issues Field group for Taxonomy Term MIA Reply To: Field group for Taxonomy Term MIA

  • Here’s my code if it’s of any help to others.

    This is my solution to adding custom fields targeting specifically the children of parent categories.
    i.e.:

    • Locations

      • Los Angeles, CA
      • Denver, CO
      • New York, NY

    (Credit to Kellen Mace for the snippet on finding the current category edit page. Link in the code.)

    
    if ( ! defined( 'ABSPATH' ) ) {
    	exit; // Exit if accessed directly
    }
    
    class ACF_Category_Name_Location extends ACF_Location {
        public function initialize() {
            $this->name         = 'category_name';
            $this->category     = __( 'Category', 'acf');
            $this->label        = __( 'Category Name', 'acf' );
            $this->object_type  = 'post';
        }
    
        public function get_values( $rule ) {
            $choices = array();
    
            // Load all category terms, loop over them and append to choices.
            $terms = get_terms( array(
                'taxonomy' => 'category',
                'orderby' => 'name',
                'hide_empty' => false,
                'parent' => 0,
            ) );
    
            if( $terms ) {
                foreach( $terms as $term ) {
                    $choices[ $term->term_id ] = $term->name;
                }
            }
    
            return $choices;
        }
    
        public function match( $rule, $screen, $field_group ) {
            /**
             * https://kellenmace.com/get-term-edited-term-php-wordpress-admin-page/
             */
            // Get the term currently being edited on the edit.php screen in the WP admin.
            global $taxnow;
    
            if ( ! $taxnow || empty( $_GET['tag_ID'] ) ) {
                return false;
            }
    
            $term_id = absint( $_GET['tag_ID'] );
    	    $term    = get_term( $term_id, $taxnow );
    
            // return false if not and instance of WP_Term
            if ( ! $term instanceof WP_Term ) {
                return false;
            }
    
            // Compare the selected terms parent to rule value.
            $result = ( $term->parent == $rule['value'] );
    
            // Return result taking into account the operator type.
            if( $rule['operator'] == '!=' ) {
                return !$result;
            }
    
            return $result;
        }
    }