PluginProbe ʕ •ᴥ•ʔ
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager / trunk
Flexible Checkout Fields for WooCommerce – WooCommerce Checkout Manager vtrunk
4.1.39 4.1.38 trunk 1.2 1.2.1 1.2.2 1.2.3 1.3 1.3.1 1.3.2 1.3.3 1.4 1.5 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6 1.6.1 1.6.10 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7 1.7.1 1.7.2 1.8 1.8.1 1.8.2 1.8.3 1.9.0 1.9.1 1.9.2 1.9.3 2.0.0 2.0.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.1.1 2.1.4 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.7.0 2.7.1 2.8.0 2.9.0 2.9.1 2.9.2 3.0.0 3.0.1 3.0.10 3.0.11 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.3.0 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.10 3.5.11 3.5.12 3.5.13 3.5.14 3.5.15 3.5.16 3.5.17 3.5.18 3.5.19 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 3.5.7 3.5.8 3.5.9 3.6.0 4.0.0 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.13 4.1.14 4.1.15 4.1.16 4.1.17 4.1.18 4.1.19 4.1.2 4.1.20 4.1.21 4.1.22 4.1.23 4.1.24 4.1.25 4.1.26 4.1.27 4.1.28 4.1.29 4.1.3 4.1.30 4.1.31 4.1.32 4.1.34 4.1.35 4.1.36 4.1.37 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9
flexible-checkout-fields / src / Field / FieldTemplateLoader.php
flexible-checkout-fields / src / Field Last commit date
Type 1 week ago FieldData.php 1 week ago FieldTemplateLoader.php 1 week ago FieldTranslator.php 1 week ago Types.php 1 week ago
FieldTemplateLoader.php
114 lines
1 <?php
2
3 namespace WPDesk\FCF\Free\Field;
4
5 use FcfVendor\WPDesk\PluginBuilder\Plugin\Hookable;
6 use WPDesk\FCF\Free\Exception\TemplateLoadingFailed;
7 use WPDesk\FCF\Free\Service\TemplateLoader;
8 use WPDesk\FCF\Free\Settings\Form\EditFieldsForm;
9 use WPDesk\FCF\Free\Settings\Option\CustomFieldOption;
10 use WPDesk\FCF\Free\Settings\Option\FieldTypeOption;
11
12 /**
13 * .
14 */
15 class FieldTemplateLoader implements Hookable {
16
17 /**
18 * @var TemplateLoader
19 */
20 private $template_loader;
21
22 /**
23 * Class constructor.
24 */
25 public function __construct( TemplateLoader $template_loader ) {
26 $this->template_loader = $template_loader;
27 }
28
29 /**
30 * {@inheritdoc}
31 */
32 public function hooks() {
33 add_filter( 'woocommerce_form_field', [ $this, 'load_field_template' ], 999, 4 );
34 add_filter( 'flexible_checkout_fields_form_field', [ $this, 'load_field_template' ], 10, 4 );
35 add_filter( 'woocommerce_form_field_args', [ $this, 'load_default_field_args' ], 10, 1 );
36 }
37
38 /**
39 * @param string $output HTML output.
40 * @param string $key Field name.
41 * @param array $args Fields args.
42 * @param mixed $value .
43 *
44 * @return string
45 *
46 * @throws TemplateLoadingFailed
47 * @internal
48 */
49 public function load_field_template( $output, $key, $args, $value ) {
50 if ( ! isset( $args[ CustomFieldOption::FIELD_NAME ] ) || ! $args[ CustomFieldOption::FIELD_NAME ] ) {
51 return $output;
52 }
53
54 $field_data = $this->get_field_data( $key );
55 if ( $field_data === null ) {
56 return $output;
57 }
58
59 $field_type = $args[ FieldTypeOption::FIELD_NAME ];
60 $field_types = apply_filters( 'flexible_checkout_fields/field_types', [] );
61 if ( ! isset( $field_types[ $field_type ] ) || ! $field_types[ $field_type ]['is_available'] ) {
62 return $output;
63 }
64
65 remove_filter( 'woocommerce_form_field', [ $this, 'load_field_template' ], 999 );
66
67 $output = $this->template_loader->load_template(
68 'fields/' . $field_type,
69 [
70 'args' => apply_filters( 'flexible_checkout_fields_field_args', $field_data, $key ),
71 'key' => $key,
72 'value' => $value,
73 'custom_attributes' => apply_filters( 'flexible_checkout_fields_custom_attributes', [], $field_data ),
74 ]
75 );
76
77 add_filter( 'woocommerce_form_field', [ $this, 'load_field_template' ], 999, 4 );
78 return $output;
79 }
80
81 /**
82 * @param string $field_name .
83 *
84 * @return mixed|null
85 */
86 private function get_field_data( string $field_name ) {
87 $fields_settings = get_option( EditFieldsForm::SETTINGS_OPTION_NAME, [] );
88
89 foreach ( $fields_settings as $group_name => $fields ) {
90 foreach ( $fields as $field_id => $field_data ) {
91 if ( $field_id === $field_name ) {
92 return $field_data;
93 }
94 }
95 }
96 return null;
97 }
98
99 /**
100 * @param array $args .
101 *
102 * @return array
103 * @internal
104 */
105 public function load_default_field_args( $args ) {
106 if ( ! isset( $args[ CustomFieldOption::FIELD_NAME ] ) || ! $args[ CustomFieldOption::FIELD_NAME ] ) {
107 return $args;
108 }
109
110 $args['options'] = [];
111 return $args;
112 }
113 }
114