image_field = $image_field; } public function print_markup( string $field_id, Markup_Field_Data $markup_field_data ): void { $token_factory = $markup_field_data->get_token_factory(); $type_var = $token_factory->variable( $field_id ) ->add_item_path( 'type' ); $dashicons_condition = $token_factory->comparison() ->set_left_operand( $type_var ) ->set_comparison_equal() ->set_right_operand( $token_factory->literal( 'dashicons' ) ); $dashicons_body = $token_factory->html( fn() => $this->print_icon_markup( $field_id, $markup_field_data ) ); $media_library_condition = $token_factory->comparison() ->set_left_operand( $type_var ) ->set_comparison_equal() ->set_right_operand( $token_factory->literal( 'media_library' ) ); $media_library_body = $token_factory->html( fn() => $this->print_icon_image_markup( $field_id, $markup_field_data ) ); $custom_image_body = $token_factory->html( fn() => $this->print_custom_image_markup( $field_id, $markup_field_data ) ); $if = $token_factory->if(); $if->new_if_branch() ->set_condition( $dashicons_condition ) ->set_body( $dashicons_body ); $if->new_elseif_branch() ->set_condition( $media_library_condition ) ->set_body( $media_library_body ); $if->new_else_branch() ->set_body( $custom_image_body ); $if->print(); } protected function print_icon_markup( string $field_id, Markup_Field_Data $markup_field_data ): void { $token_factory = $markup_field_data->get_token_factory(); $token_factory->format()->new_line(); $markup_field_data->increment_and_print_tabs(); printf( ''; $token_factory->format()->new_line(); $markup_field_data->decrement_and_print_tabs(); } protected function print_icon_image_markup( string $field_id, Markup_Field_Data $markup_field_data ): void { $token_factory = $markup_field_data->get_token_factory(); $token_factory->format()->new_line(); $markup_field_data->increment_and_print_tabs(); $this->image_field->print_markup( $field_id, $markup_field_data ); $token_factory->format()->new_line(); $markup_field_data->decrement_and_print_tabs(); } protected function print_custom_image_markup( string $field_id, Markup_Field_Data $markup_field_data ): void { $token_factory = $markup_field_data->get_token_factory(); $token_factory->format()->new_line(); $markup_field_data->increment_and_print_tabs(); printf( 'icon'; $token_factory->format()->new_line(); $markup_field_data->decrement_and_print_tabs(); } /** * @return array */ public function get_template_variables( Variable_Field_Data $variable_field_data ): array { $args = array( 'type' => '', 'value' => '', ); $value = $variable_field_data->get_value(); if ( false === is_array( $value ) ) { return $args; } $args['type'] = $this->get_string_arg( 'type', $value ); switch ( $args['type'] ) { case 'dashicons': case 'url': $args['value'] = $this->get_string_arg( 'value', $value ); break; case 'media_library': $attachment_id = $this->get_string_arg( 'value', $value ); $variable_field_data->set_value( $attachment_id ); $args = array_merge( $args, $this->image_field->get_template_variables( $variable_field_data ) ); break; } return $args; } public function get_validation_template_variables( Variable_Field_Data $variable_field_data ): array { return array( 'type' => 'dashicons', 'value' => 'dashicons-admin-generic', ); } public function is_with_field_wrapper( Layout_Settings $layout_settings, Field_Settings $field_settings, Field_Meta $field_meta ): bool { return false; } }