/** * Retrieves the url of an image uploaded via an ACF image field * TODO: Add support for return types other than array * * @param (string) $name The name of the ACF field - assume default return of image array is used * @param (string) $size The size of the image to be retrieved * @return (string) The image url ( defaults to original size ) */ function try_get_acf_image_src($name, $size = 'thumbnail') { // Return false if ACF is not active if (!function_exists('get_field')) { return false; } // Assume default of image array is used $image_array = acf_get_row() ? get_sub_field($name) : get_field($name); return try_get_image_src_from_array($image_array, $size); }
function update_sub_field($selector, $value, $post_id = false) { // filter post_id $post_id = acf_get_valid_post_id($post_id); // vars $field = false; // within a have_rows loop if (is_string($selector)) { // get current row $row = acf_get_row(); // override $post_id $post_id = $row['post_id']; // get sub field $field = get_sub_field_object($selector, false, false); // create dummy field if (!$field) { $field = acf_get_valid_field(array('name' => $selector, 'key' => '', 'type' => '')); } // update name $field['name'] = "{$row['name']}_{$row['i']}_{$field['name']}"; } elseif (is_array($selector)) { // validate if (count($selector) < 3) { return false; } // vars $parent_name = acf_extract_var($selector, 0); // load parent $field = acf_maybe_get_field($parent_name, $post_id); // add to name $name = "{$field['name']}"; // sub fields foreach ($selector as $s) { if (is_numeric($s)) { $row_i = intval($s) - 1; // add to name $name .= "_{$row_i}"; } else { // update parent $field = acf_get_sub_field($s, $field); // create dummy field if (!$field) { $field = acf_get_valid_field(array('name' => $s, 'key' => '', 'type' => '')); } // add to name $name .= "_{$field['name']}"; } // if } // foreach // update name $field['name'] = $name; } // delete if ($value === null) { return acf_delete_value($post_id, $field); } // update return acf_update_value($value, $post_id, $field); }
function pmxe_export_acf_field_xml($field_value, $exportOptions, $ID, $recordID, &$xmlWriter, $element_name = '', $fieldSnipped = '', $group_id = '') { if (!empty($field_value)) { $field_value = maybe_unserialize($field_value); $field_name = $ID ? $exportOptions['cc_label'][$ID] : $exportOptions['name']; $field_options = $ID ? unserialize($exportOptions['cc_options'][$ID]) : $exportOptions; //$element_name = 'acf_' . $element_name; $put_to_xml = true; // switch ACF field type switch ($field_options['type']) { case 'date_time_picker': case 'date_picker': $field_value = date('Ymd', strtotime($field_value)); break; case 'file': case 'image': if (is_numeric($field_value)) { $field_value = wp_get_attachment_url($field_value); } elseif (is_array($field_value)) { $field_value = $field_value['url']; } break; case 'gallery': $v = array(); foreach ($field_value as $key => $item) { $v[] = $item['url']; } $field_value = implode(",", $v); break; case 'location-field': $localion_parts = explode("|", $field_value); if (!empty($localion_parts)) { $xmlWriter->startElement($element_name); $xmlWriter->startElement('address'); $xmlWriter->writeCData($localion_parts[0]); $xmlWriter->endElement(); if (!empty($localion_parts[1])) { $coordinates = explode(",", $localion_parts[1]); if (!empty($coordinates)) { $xmlWriter->startElement('lat'); $xmlWriter->writeCData($coordinates[0]); $xmlWriter->endElement(); $xmlWriter->startElement('lng'); $xmlWriter->writeCData($coordinates[1]); $xmlWriter->endElement(); } } $xmlWriter->endElement(); } $put_to_xml = false; break; case 'paypal_item': $xmlWriter->startElement($element_name); if (is_array($field_value)) { foreach ($field_value as $key => $value) { $xmlWriter->startElement($key); $xmlWriter->writeCData($value); $xmlWriter->endElement(); } } $xmlWriter->endElement(); $put_to_xml = false; break; case 'google_map': $xmlWriter->startElement($element_name); $xmlWriter->startElement('address'); $xmlWriter->writeCData($field_value['address']); $xmlWriter->endElement(); $xmlWriter->startElement('lat'); $xmlWriter->writeCData($field_value['lat']); $xmlWriter->endElement(); $xmlWriter->startElement('lng'); $xmlWriter->writeCData($field_value['lng']); $xmlWriter->endElement(); $xmlWriter->endElement(); $put_to_xml = false; break; case 'acf_cf7': case 'gravity_forms_field': if (!empty($field_options['multiple'])) { $field_value = implode(",", $field_value); } break; case 'page_link': if (is_array($field_value)) { $field_value = implode(",", $field_value); } break; case 'post_object': if (!empty($field_options['multiple'])) { $v = array(); foreach ($field_value as $key => $pid) { if (is_numeric($pid)) { $entry = get_post($pid); if ($entry) { $v[] = $entry->post_name; } } else { $v[] = $pid->post_name; } } $field_value = implode(",", $v); } else { if (is_numeric($field_value)) { $entry = get_post($field_value); if ($entry) { $field_value = $entry->post_name; } } else { $field_value = $field_value->post_name; } } break; case 'relationship': $v = array(); foreach ($field_value as $key => $pid) { $entry = get_post($pid); if ($entry) { $v[] = $entry->post_title; } } $field_value = implode(",", $v); break; case 'user': if (!empty($field_options['multiple'])) { $v = array(); foreach ($field_value as $key => $user) { if (is_numeric($user)) { $entry = get_user_by('ID', $user); if ($entry) { $v[] = $entry->user_email; } } else { $v[] = $user['user_email']; } } $field_value = implode(",", $v); } else { if (is_numeric($field_value)) { $entry = get_user_by('ID', $field_value); if ($entry) { $field_value = $entry->user_email; } } else { $field_value = $field_value['user_email']; } } break; case 'taxonomy': $xmlWriter->startElement($element_name); if (!in_array($field_options['field_type'], array('radio', 'select'))) { foreach ($field_value as $key => $tid) { $entry = get_term($tid, $field_options['taxonomy']); if ($entry and !is_wp_error($entry)) { $xmlWriter->startElement('term'); $xmlWriter->writeCData($entry->slug); $xmlWriter->endElement(); } } } else { $entry = get_term($field_value, $field_options['taxonomy']); if ($entry) { $xmlWriter->startElement('term'); $xmlWriter->writeCData($entry->slug); $xmlWriter->endElement(); } } $xmlWriter->endElement(); $put_to_xml = false; break; case 'select': if (!empty($field_options['multiple'])) { $field_value = implode(",", $field_value); } break; case 'checkbox': $field_value = implode(",", $field_value); break; case 'repeater': $xmlWriter->startElement($element_name); if (have_rows($field_name, $recordID)) { while (have_rows($field_name, $recordID)) { the_row(); $row = acf_get_row(); //$xmlWriter->startElementNs('key_' . $row['i'], 'row', null); $xmlWriter->startElement('row'); foreach ($row['field']['sub_fields'] as $sub_field) { // get $v = acf_format_value($row['value'][$row['i']][$sub_field['key']], $row['post_id'], $sub_field); pmxe_export_acf_field_xml($v, $sub_field, false, $recordID, $xmlWriter, $sub_field['name'], '', ''); } $xmlWriter->endElement(); } } $xmlWriter->endElement(); $put_to_xml = false; break; case 'flexible_content': $xmlWriter->startElement($element_name); // check if the flexible content field has rows of data if (have_rows($field_name)) { // loop through the rows of data while (have_rows($field_name)) { the_row(); $row = acf_get_row(); foreach ($row['field']['layouts'] as $layout) { if ($layout['name'] == $row['value'][$row['i']]['acf_fc_layout']) { $xmlWriter->startElement($row['value'][$row['i']]['acf_fc_layout'] . '_' . $row['i']); foreach ($layout['sub_fields'] as $sub_field) { if (isset($row['value'][$row['i']][$sub_field['key']])) { // get $v = acf_format_value($row['value'][$row['i']][$sub_field['key']], $row['post_id'], $sub_field); pmxe_export_acf_field_xml($v, $sub_field, false, $recordID, $xmlWriter, $sub_field['name'], '', ''); } } $xmlWriter->endElement(); } } } } else { // no layouts found } $xmlWriter->endElement(); $put_to_xml = false; break; default: break; } if ($put_to_xml) { $xmlWriter->startElement($element_name); $xmlWriter->writeCData(apply_filters('pmxe_acf_field', pmxe_filter(maybe_serialize($field_value), $fieldSnipped), $field_name, $recordID)); $xmlWriter->endElement(); } } }
function get_sub_field_object($selector, $format_value = true, $load_value = true) { // vars $row = acf_get_row(); // bail early if no row if (!$row) { return false; } // vars $parent = $row['field']; // get sub field $sub_field = acf_get_sub_field($selector, $parent); // add value if ($sub_field) { // load value if ($load_value) { $sub_field['value'] = get_sub_field($sub_field['name'], $format_value); } } // return return $sub_field; }
function pmxe_export_acf_field_csv($field_value, $exportOptions, $ID, $recordID, &$article, &$acfs, $element_name = '', $fieldSnipped = '', $group_id = '', $preview = false) { $put_to_csv = true; $field_name = $ID ? $exportOptions['cc_label'][$ID] : $exportOptions['name']; $field_options = $ID ? unserialize($exportOptions['cc_options'][$ID]) : $exportOptions; if (!empty($field_value)) { $field_value = maybe_unserialize($field_value); //$element_name = 'acf_' . $element_name; $implode_delimiter = $exportOptions['delimiter'] == ',' ? '|' : ','; // switch ACF field type switch ($field_options['type']) { /*case 'textarea': case 'wysiwyg': case 'wp_wysiwyg': if ($preview) $field_value = trim(preg_replace('~[\r\n]+~', ' ', htmlspecialchars($field_value))); break;*/ case 'date_time_picker': case 'date_picker': $field_value = date('Ymd', strtotime($field_value)); break; case 'file': case 'image': if (is_numeric($field_value)) { $field_value = wp_get_attachment_url($field_value); } elseif (is_array($field_value)) { $field_value = $field_value['url']; } break; case 'gallery': $v = array(); foreach ($field_value as $key => $item) { $v[] = $item['url']; } $field_value = implode($implode_delimiter, $v); break; case 'location-field': $localion_parts = explode("|", $field_value); $acfs[] = $element_name . '_address'; $acfs[] = $element_name . '_lat'; $acfs[] = $element_name . '_lng'; if (!empty($localion_parts)) { $article[$element_name . '_address'] = $localion_parts[0]; if (!empty($localion_parts[1])) { $coordinates = explode(",", $localion_parts[1]); if (!empty($coordinates)) { $article[$element_name . '_lat'] = $coordinates[0]; $article[$element_name . '_lng'] = $coordinates[1]; } } } $put_to_csv = false; break; case 'paypal_item': $acfs[] = $element_name . '_item_name'; $acfs[] = $element_name . '_item_description'; $acfs[] = $element_name . '_price'; if (is_array($field_value)) { foreach ($field_value as $key => $value) { $article[$element_name . '_' . $key] = $value; } } $put_to_csv = false; break; case 'google_map': $article[$element_name . '_address'] = $field_value['address']; $acfs[] = $element_name . '_address'; $article[$element_name . '_lat'] = $field_value['lat']; $acfs[] = $element_name . '_lat'; $article[$element_name . '_lng'] = $field_value['lng']; $acfs[] = $element_name . '_lng'; $put_to_csv = false; break; case 'acf_cf7': case 'gravity_forms_field': if (!empty($field_options['multiple'])) { $field_value = implode($implode_delimiter, $field_value); } break; case 'page_link': if (is_array($field_value)) { $field_value = implode($implode_delimiter, $field_value); } break; case 'post_object': if (!empty($field_options['multiple'])) { $v = array(); foreach ($field_value as $key => $pid) { if (is_numeric($pid)) { $entry = get_post($pid); if ($entry) { $v[] = $entry->post_name; } } else { $v[] = $pid->post_name; } } $field_value = implode($implode_delimiter, $v); } else { if (is_numeric($field_value)) { $entry = get_post($field_value); if ($entry) { $field_value = $entry->post_name; } } else { $field_value = $field_value->post_name; } } break; case 'relationship': $v = array(); foreach ($field_value as $key => $pid) { $entry = get_post($pid); if ($entry) { $v[] = $entry->post_title; } } $field_value = implode($implode_delimiter, $v); break; case 'user': if (!empty($field_options['multiple'])) { $v = array(); foreach ($field_value as $key => $user) { if (is_numeric($user)) { $entry = get_user_by('ID', $user); if ($entry) { $v[] = $entry->user_email; } } else { $v[] = $user['user_email']; } } $field_value = implode($implode_delimiter, $v); } else { if (is_numeric($field_value)) { $entry = get_user_by('ID', $field_value); if ($entry) { $field_value = $entry->user_email; } } else { $field_value = $field_value['user_email']; } } break; case 'taxonomy': if (!in_array($field_options['field_type'], array('radio', 'select'))) { $v = array(); foreach ($field_value as $key => $tid) { $entry = get_term($tid, $field_options['taxonomy']); if ($entry and !is_wp_error($entry)) { $v[] = $entry->slug; } } $field_value = implode($implode_delimiter, $v); } else { $entry = get_term($field_value, $field_options['taxonomy']); if ($entry) { $field_value = $entry->slug; } } break; case 'select': if (!empty($field_options['multiple'])) { $field_value = implode($implode_delimiter, $field_value); } break; case 'checkbox': $field_value = implode($implode_delimiter, $field_value); break; case 'repeater': if (have_rows($field_name, $recordID)) { $rowValues = array(); while (have_rows($field_name, $recordID)) { the_row(); $row = acf_get_row(); foreach ($row['field']['sub_fields'] as $sub_field) { // get $v = $row['value'][$row['i']][$sub_field['key']]; //acf_format_value($row['value'][ $row['i'] ][ $sub_field['key'] ], $row['post_id'], $sub_field); $rowValues[$sub_field['name']][] = $v; //pmxe_export_acf_field_csv($v, $sub_field, false, $recordID, $article, $acfs, str_replace('acf' . $group_id, '', $element_name) . '_' . $sub_field['name'], ''); } } foreach ($rowValues as $key => $values) { $article[$element_name . '_' . $key] = $preview ? trim(preg_replace('~[\\r\\n]+~', ' ', htmlspecialchars(implode($implode_delimiter, $values)))) : implode($implode_delimiter, $values); if (!in_array($element_name . '_' . $key, $acfs)) { $acfs[] = $element_name . '_' . $key; } } } $put_to_csv = false; break; case 'flexible_content': // check if the flexible content field has rows of data if (have_rows($field_name)) { // loop through the rows of data while (have_rows($field_name)) { the_row(); $row = acf_get_row(); foreach ($row['field']['layouts'] as $layout) { if ($layout['name'] == $row['value'][$row['i']]['acf_fc_layout']) { foreach ($layout['sub_fields'] as $sub_field) { if (isset($row['value'][$row['i']][$sub_field['key']])) { // get $v = $row['value'][$row['i']][$sub_field['key']]; //acf_format_value($row['value'][ $row['i'] ][ $sub_field['key'] ], $row['post_id'], $sub_field); $article[$element_name . '_' . $layout['name'] . '_' . $row['i'] . '_' . $sub_field['name']] = $v; $acfs[] = $element_name . '_' . $layout['name'] . '_' . $row['i'] . '_' . $sub_field['name']; //pmxe_export_acf_field_csv($v, $sub_field, false, $recordID, $article, $acfs, str_replace('acf' . $group_id, '', $element_name) . '_' . $row['value'][ $row['i'] ]['acf_fc_layout'] . '_' . $row['i'] . '_' . $sub_field['name'], '', '', true); } } } } } } else { // no layouts found } $put_to_csv = false; break; default: break; } } if ($put_to_csv) { switch ($field_options['type']) { case 'repeater': global $acf; if ($acf->settings['version'] and version_compare($acf->settings['version'], '5.0.0') >= 0) { $acf_fields = get_posts(array('posts_per_page' => -1, 'post_type' => 'acf-field', 'post_parent' => $field_options['ID'], 'post_status' => 'publish', 'orderby' => 'menu_order', 'order' => 'ASC')); if (!empty($acf_fields)) { foreach ($acf_fields as $field) { $sub_name = $element_name . '_' . $field->post_excerpt; if (!in_array($sub_name, $acfs)) { $acfs[] = $sub_name; } } } } break; case 'google_map': case 'location-field': $acfs[] = $element_name . '_address'; $acfs[] = $element_name . '_lat'; $acfs[] = $element_name . '_lng'; break; case 'paypal_item': $acfs[] = $element_name . '_item_name'; $acfs[] = $element_name . '_item_description'; $acfs[] = $element_name . '_price'; break; default: $val = apply_filters('pmxe_acf_field', pmxe_filter(!empty($field_value) ? maybe_serialize($field_value) : '', $fieldSnipped), $field_name, $recordID); $article[$element_name] = $preview ? trim(preg_replace('~[\\r\\n]+~', ' ', htmlspecialchars($val))) : $val; $acfs[] = $element_name; break; } } }