<?php
namespace wpai_acf_add_on\acf\fields;
use wpai_acf_add_on\acf\ACFService;
require_once(__DIR__.'/fieldInterface.php');
define('PMAI_FIELDS_ROOT_DIR', str_replace('\\', '/', dirname(__FILE__)));
/**
* Class Field
* @package wpai_acf_add_on\acf\fields
*/
abstract class Field implements FieldInterface {
/**
* field type
*/
public $type;
/**
* @var array
*/
public $data;
/**
* @var bool
*/
public $supportedVersion = false;
/**
* @var array
*/
public $parsingData;
/**
* @var array
*/
public $importData;
/**
* @var array
*/
public $options = array();
/**
* @var Field
*/
public $parent;
/**
* @var array
*/
public $subFields = array();
/**
* Field constructor.
* @param $field
* @param $post
* @param $field_name
* @param $parent_field
*/
public function __construct($field, $post, $field_name = "", $parent_field = false) {
$this->data = array(
'field' => $field,
'post' => $post,
'field_name' => $field_name
);
$this->setParent($parent_field);
$this->data = array_merge($this->data, $this->getFieldData());
$this->initSubFields();
}
/**
* Create sub field instances
*/
public function initSubFields(){
// Get sub fields configuration
$subFieldsData = $this->isLocalFieldStorage() ? $this->getLocalSubFieldsData() : $this->getDBSubFieldsData();
if ($subFieldsData){
foreach ($subFieldsData as $subFieldData) {
$field = $this->initDataAndCreateField($subFieldData);
$this->subFields[] = $field;
}
}
// Init sub fields for Flexible Content
if (ACFService::isACFNewerThan('5.0.0') && $this->getType() == 'flexible_content' && $this->isLocalFieldStorage()) {
// get flexible field
$flexibleField = $this->getData('field');
// vars
$flex_fields = acf_get_fields($flexibleField);
// loop through layouts, sub fields and swap out the field key with the real field
foreach (array_keys($flexibleField['layouts']) as $fi) {
// extract layout
$layout = acf_extract_var($flexibleField['layouts'], $fi);
// append sub fields
if (!empty($flex_fields)) {
$layout['sub_fields'] = [];
foreach (array_keys($flex_fields) as $fk) {
// check if 'parent_layout' is empty
if (empty($flex_fields[$fk]['parent_layout'])) {
// parent_layout did not save for this field, default it to first layout
$flex_fields[$fk]['parent_layout'] = $layout['key'];
}
// append sub field to layout,
if ($flex_fields[$fk]['parent_layout'] == $layout['key']) {
$layout['sub_fields'][] = acf_extract_var($flex_fields, $fk);
}
}
}
// append back to layouts
$this->data['field']['layouts'][$fi] = $layout;
}
}
}
/**
* @return array
*/
private function getFieldData(){
$data = array();
$field = $this->getData('field');
$post = $this->getData('post');
// set field default values
$reset = array('multiple', 'class', 'id');
foreach ($reset as $key){
if (empty($field[$key])) $field[$key] = false;
}
if ( array_key_exists( 'key', $field ) ) {
$data['current_field'] = empty($post['fields'][$field['key']]) ? false : $post['fields'][$field['key']];
} else {
$data['current_field'] = false;
}
$options = array('is_multiple_field_value', 'multiple_value');
foreach ($options as $option){
$data['current_' . $option] = isset($field['key']) && isset($post[$option][$field['key']]) ? $post[$option][$field['key']] : false;
}
// If parent field exists, parse field name
if ( "" != $this->getData('field_name') ){
$field_keys = str_replace(array('[',']'), array(''), str_replace('][', ':', $this->getData('field_name')));
$data['current_field'] = false;
foreach (explode(":", $field_keys) as $n => $key) {
if (!empty($post['fields'][$key])) {
$data['current_field'] = $post['fields'][$key];
} elseif (isset($data['current_field'][$key])) {
$data['current_field'] = $data['current_field'][$key];
}
foreach ($options as $option){
if (!empty($post[$option][$key])) {
$data['current_' . $option] = $post[$option][$key];
} elseif(!empty($data['current_' . $option][$key])) {
$data['current_' . $option] = $data['current_' . $option][$key];
}
}
}
$data['current_field'] = empty($data['current_field'][$field['key']]) ? false : $data['current_field'][$field['key']];
foreach ($options as $option){
$data['current_' . $option] = isset($data['current_' . $option][$field['key']]) ? $data['current_' . $option][$field['key']] : false;
}
}
return $data;
}
/**
* @param $xpath
* @param $parsingData
* @param array $args
* @return void
*/
public function parse($xpath, $parsingData, $args = array()) {
$this->parsingData = $parsingData;
$defaults = array(
'field_path' => '',
'xpath_suffix' => '',
'repeater_count_rows' => 0,
'inside_repeater' => false
);
$args = array_merge($defaults, $args);
$field = $this->getData('field');
$isMultipleField = (isset($parsingData['import']->options['is_multiple_field_value'][$field['key']])) ? $parsingData['import']->options['is_multiple_field_value'][$field['key']] : FALSE;
$multipleValue = (isset($parsingData['import']->options['multiple_value'][$field['key']])) ? $parsingData['import']->options['multiple_value'][$field['key']] : FALSE;
if ("" != $args['field_path']) {
$fieldKeys = preg_replace('%[\[\]]%', '', str_replace('][', ':', $args['field_path']));
$is_multiple_field_value = $parsingData['import']->options['is_multiple_field_value'];
$is_multiple_value = $parsingData['import']->options['multiple_value'];
foreach (explode(":", $fieldKeys) as $n => $key) {
$xpath = (!$n) ? $parsingData['import']->options['fields'][$key] : $xpath[$key];
if (!$n && isset($is_multiple_field_value[$key])) {
$isMultipleField = $is_multiple_field_value[$key];
}
if (isset($isMultipleField[$key])) {
$isMultipleField = $isMultipleField[$key];
}
if (!$n && isset($is_multiple_value[$key])) {
$multipleValue = $is_multiple_value[$key];
}
if (isset($multipleValue[$key])) {
$multipleValue = $multipleValue[$key];
}
}
$xpath = empty($xpath[$field['key']]) ? false : $xpath[$field['key']];
$isMultipleField = isset($isMultipleField[$field['key']]) ? $isMultipleField[$field['key']] : false;
$multipleValue = isset($multipleValue[$field['key']]) ? $multipleValue[$field['key']] : false;
}
$this->setOption('base_xpath', $parsingData['xpath_prefix'] . $parsingData['import']->xpath . $args['xpath_suffix']);
$this->setOption('xpath', $xpath);
$this->setOption('is_multiple_field', $isMultipleField);
$this->setOption('multiple_value', $multipleValue);
$this->setOption('count', ($args['repeater_count_rows']) ? $args['repeater_count_rows'] : $parsingData['count']);
$this->setOption('values', a
没有合适的资源?快使用搜索试试~ 我知道了~
【WordPress插件】2022年最新版完整功能demo+插件v3.3.7 Beta 1.1.zip
共186个文件
php:173个
js:3个
mo:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 56 浏览量
2022-04-15
21:34:05
上传
评论
收藏 205KB ZIP 举报
温馨提示
"【WordPress插件】2022年最新版完整功能demo+插件v3.3.7 Beta 1.1 WP All Import Pro ACF Add-On WP全部导入PRO ACF加载项" ---------- 泰森云每天更新发布最新WordPress主题、HTML主题、WordPress插件、shopify主题、opencart主题、PHP项目源码、安卓项目源码、ios项目源码,更有超10000个资源可供选择,如有需要请站内联系。
资源推荐
资源详情
资源评论
收起资源包目录
【WordPress插件】2022年最新版完整功能demo+插件v3.3.7 Beta 1.1.zip (186个子文件)
admin.css 35KB
admin-ie.css 0B
.gitignore 15B
datetime.min.js 71KB
admin.js 8KB
pmai.js 78B
wp_all_import_acf_add_on-ja.mo 12KB
wp_all_import_acf_add_on.mo 10KB
en_US.mo 393B
field.php 26KB
flexible_content.php 16KB
wpai-acf-add-on.php 16KB
updater.php 14KB
fieldRepeater.php 12KB
fieldTaxonomy.php 12KB
table.php 10KB
google_map.php 10KB
ACFService.php 10KB
fieldTable.php 9KB
taxonomy.php 9KB
pmai_is_acf_update_allowed.php 8KB
google_map_extended.php 7KB
baseGoogleMap.php 6KB
model.php 5KB
fieldGoogleMap.php 5KB
fieldClone-v5.php 5KB
record.php 5KB
header.php 5KB
list.php 5KB
fieldFlexibleContent.php 5KB
helper.php 5KB
pmxi_reimport.php 5KB
fieldLink.php 4KB
fieldGallery.php 4KB
import.php 3KB
gallery.php 3KB
record.php 3KB
repeater-v4.php 3KB
repeater-v5.php 3KB
fieldSelect.php 3KB
group.php 3KB
fieldButtonGroup.php 3KB
fieldRadio.php 3KB
controller.php 3KB
fieldTrueFalse.php 3KB
fieldCheckbox.php 3KB
fieldPageLink.php 2KB
input.php 2KB
config.php 2KB
index.php 2KB
file.php 2KB
image_aspect_ratio_crop.php 2KB
image_crop.php 2KB
image.php 2KB
fieldDatePicker.php 2KB
fieldGroup-v5.php 2KB
fieldDateTimePicker.php 2KB
admin_notices.php 2KB
fieldUser.php 2KB
admin.php 2KB
fieldFactory.php 2KB
fieldImageCrop.php 2KB
group-v5-local.php 2KB
fieldPostObject.php 2KB
fieldFile.php 2KB
validated_field.php 2KB
fieldImage.php 2KB
wp_ajax_get_acf.php 2KB
fieldPaypalItem.php 2KB
fieldRelationship.php 1KB
footer.php 1KB
footer.php 1KB
footer.php 1KB
fieldCountry.php 1KB
functions.php 1KB
footer.php 1KB
footer.php 1KB
fieldGravityFormsField.php 1KB
fieldAcfCf7.php 1KB
link.php 1KB
group-v4.php 1KB
fieldFontAwesome.php 1001B
fieldTimePicker.php 998B
fieldStarRating.php 998B
fieldWpWysiwyg.php 995B
fieldTextarea.php 991B
fieldWysiwyg.php 989B
fieldLimiter.php 988B
fieldPassword.php 987B
fieldNumber.php 985B
fieldOembed.php 985B
fieldVimeo.php 982B
fieldRange.php 982B
fieldText.php 979B
fieldColorPicker.php 977B
fieldUrl.php 976B
paypal_item.php 968B
fieldEmail.php 958B
location-field.php 917B
fieldGoogleMapExtended.php 889B
共 186 条
- 1
- 2
资源评论
Lee达森
- 粉丝: 953
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功