-
Notifications
You must be signed in to change notification settings - Fork 0
/
class.storychief-acf.php
129 lines (105 loc) · 3.5 KB
/
class.storychief-acf.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
use Storychief\ImageUploader;
class Storychief_ACF {
private static $initiated = false;
public static function init() {
if ( ! self::$initiated ) {
self::$initiated = true;
add_action( 'storychief_after_test_action', array( 'Storychief_ACF', 'save_custom_fields_definitions' ) );
add_action( 'storychief_after_publish_action', array( 'Storychief_ACF', 'save_custom_fields_values' ) );
}
}
public static function save_custom_fields_definitions( $payload ) {
$custom_field_definitions = isset( $payload['custom_fields']['data'] ) ? $payload['custom_fields']['data'] : array();
self::set_custom_field_definitions( $custom_field_definitions );
}
public static function save_custom_fields_values( $payload ) {
$post_ID = $payload['external_id'];
$cf_mapping = Storychief_ACF::get_custom_field_mapping();
foreach ( $payload['custom_fields'] as $field ) {
if ( isset( $cf_mapping[ $field['key'] ] ) && isset( $field['value'] ) ) {
$field_key = $cf_mapping[ $field['key'] ];
$field_definition = self::getFieldDefinition( $field_key );
switch ( $field_definition['type'] ) {
case 'image':
$post = get_post( $post_ID );
$uploader = new ImageUploader( $field['value'], '', $post );
$uploader->save();
$value = attachment_url_to_postid( $uploader->url );
break;
case 'select':
case 'checkbox':
case 'relationship':
$value = explode( ',', $field['value'] );
break;
case 'taxonomy':
$slugs = explode(',', $field['value']);
$value = self::convertTaxonomySlugsToIds($field_definition, $slugs);
break;
default:
$value = $field['value'];
break;
}
update_field( $field_key, $value, $post_ID );
}
}
}
/**
* Display a view
*
* @param $name
* @param array $args
*/
public static function view( $name, array $args = array() ) {
$args = apply_filters( 'storychief_view_arguments', $args, $name );
foreach ( $args as $key => $val ) {
$$key = $val;
}
load_plugin_textdomain( 'storychief-acf' );
$file = STORYCHIEF_ACF__PLUGIN_DIR . 'views/' . $name . '.php';
include( $file );
}
/**
* Removes all connection options
* @static
*/
public static function plugin_deactivation() {
self::remove_custom_field_definitions();
self::remove_custom_field_mapping();
}
private static function getFieldDefinition( $field_key ) {
if ( function_exists( 'acf_get_field' ) ) { // pro
return acf_get_field( $field_key );
} else { // free
return apply_filters( 'acf/load_field', array(), $field_key );
}
}
public static function get_custom_field_definitions() {
return get_option( 'storychief_acf_definitions' );
}
public static function set_custom_field_definitions( $key ) {
update_option( 'storychief_acf_definitions', $key );
}
public static function remove_custom_field_definitions() {
delete_option( 'storychief_acf_definitions' );
}
public static function get_custom_field_mapping() {
return get_option( 'storychief_acf_mapping' );
}
public static function set_custom_field_mapping( $key ) {
update_option( 'storychief_acf_mapping', $key );
}
public static function remove_custom_field_mapping() {
delete_option( 'storychief_acf_mapping' );
}
private static function convertTaxonomySlugsToIds( $field_definition, $slugs ) {
$termIds = array();
foreach ( $slugs as $slug ) {
$term = get_term_by( 'slug', $slug, $field_definition['taxonomy'] );
if ( $term ) {
$termIds[] = $term->term_id;
}
}
return $termIds;
}
}