Including AFC field in functions.php - wordpress

Could anyone guide me in how to add an ACF field in a function please. Everything I do returns nothing.
add_action('woocommerce_after_main_content', 'custom_seo_block', 10);
function custom_seo_block() {
return "<?php the_field('seo_content'); ?>";
}
Thanks in advance

add_action('woocommerce_after_main_content', 'custom_seo_block', 10);
function custom_seo_block() {
$value = get_field( "seo_content", $post_id );
return $value;
}
Get ACF field value by post id and than return it.

It is still not returning the data. Sorry if this is a silly question. Obviously doing something wrong here.
add_action('woocommerce_after_main_content', 'custom_seo_block', 10);
function custom_seo_block() {
if( function_exists('acf_add_local_field_group') ):
acf_add_local_field_group(array(
'key' => 'group_5c52deb4b5fe0',
'title' => 'SEO content',
'fields' => array(
array(
'key' => 'field_5c52dec5d99a4',
'label' => 'SEO content',
'name' => 'seo_content',
'type' => 'wysiwyg',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'tabs' => 'all',
'toolbar' => 'full',
'media_upload' => 1,
'delay' => 0,
),
),
'location' => array(
array(
array(
'param' => 'taxonomy',
'operator' => '==',
'value' => 'all',
),
),
),
'menu_order' => 5,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => 1,
'description' => '',
));
endif;
}

add_action('woocommerce_after_main_content', 'custom_seo_block', 10);
function custom_seo_block() {
global $post;
the_field('seo_content',$post->ID);
}

Related

Can't get custom post type id inside function in acf/init

Am trying to get the ID of single product page inside my function but it's returning bool(false) or NULL.
What am trying to achieve is to get the ID to filter the categories taxonomies terms of a specific product and display it in a tab using ACF but unfortunately am not able to get the ID.
I have the global $post code working in the meta box I added for the single products edit page so I'm not sure what am missing here.
Below is my code:
function my_acf_add_local_field_groups() {
global $post;
var_dump($post); // returns NULL and bool(false) when echo'd
acf_add_local_field_group(array(
'key' => 'tab_group_1',
'title' => 'Product Sizes and Prices',
'name' => 'group_sizes_tab',
'fields' => array (
array (
'key' => 'field_tab_size_1',
'label' => 'First Size',
'name' => 'store_sizes_',
'type' => 'tab',
'parent' => 'tab_group_1',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => '',
'max' => '',
),
array (
'key' => 'field_unique_key',
'label' => 'Simple Repeater',
'name' => 'simple_repeater',
'type' => 'repeater',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => 0,
'max' => 10,
'layout' => 'table',
'button_label' => 'Add row',
'sub_fields' => array (
array (
'key' => 'field_unique_key_1',
'label' => 'Total Products',
'name' => 'total_products',
'type' => 'text',
),
array (
'key' => 'field_unique_key_2',
'label' => 'Total Prices',
'name' => 'total_prices',
'type' => 'text',
),
),
),
array (
'key' => 'field_tab_size_2',
'label' => 'Second Size',
'name' => 'store_sizes_2',
'type' => 'tab',
'parent' => 'tab_group_1',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => '',
'max' => '',
),
),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'products',
),
),
),
));
}
add_action('acf/init', 'my_acf_add_local_field_groups');

How to add custom fields in ACF programmatically?

I want to programmatically add a tab with repeater inside but I can't seem to find a solution, I've googled all available resources but still not working.
I already tried using acf_add_local_field_group and acf_add_local_field but still no luck.
Well I can create a tab using acf_add_local_field but when I tried to add a child which in this case a repeater OR even a text field it still doesn't work.
Here's my code to create a tab and its child but the child doesn't work.
acf_add_local_field(array(
'key' => 'field_1',
'label' => 'Sub Title',
'name' => 'sub_title',
'type' => '',
'parent' => 'field_5bd14c9349930',
'fields' => array (
array(
'key' => 'field_2',
'label' => 'This is a test',
'name' => 'my_test',
'type' => 'text',
)
)
));
You should use acf_add_local_field_group to construct the whole field group.
Here's the proper code for adding a group and a custom tab with single repeater field inside:
if( function_exists('acf_add_local_field_group') ):
acf_add_local_field_group(array (
'key' => 'group_1',
'title' => 'My Group',
'fields' => array (
array (
'key' => 'field_unique_key',
'label' => 'First Tab',
'name' => '',
'type' => 'tab',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'placement' => 'top',
'endpoint' => 0,
),
array (
'key' => 'field_unique_key',
'label' => 'Simple Repeater',
'name' => 'simple_repeater',
'type' => 'repeater',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => 0,
'max' => 10,
'layout' => 'table',
'button_label' => 'Add row',
'sub_fields' => array ( // Here you can add as many subfields for this repeater as you want
array (
'key' => 'field_unique_key',
'label' => 'Link',
'name' => 'link',
'type' => 'link', // example link type
'instructions' => 'Link name and URL',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'return_format' => 'array',
),
),
),
),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'post',
),
),
),
'menu_order' => 0,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
));
endif;

get_sub_field on repeater returns empty keys/values

EDIT: Updated with code which outputs the array
Should be noted I have other fields which work correctly, the issue is only with the repeater sub_fields.
// Needs to be updated to be more dynamic i know
function get_flexible_content_sections($name, $option = "") {
// check if the flexible content field has rows of data
if ( have_rows( $name, $option ) ):
// loop through the rows of data
while ( have_rows( $name, $option ) ) : the_row(); ?>
<section class="section <?= get_sub_field( "class" ) ?>">
<div class="section-content clear">
<?php while ( have_rows( "section" ) ) : the_row();
if ( get_row_layout() == 'one_width_cols' ) : ?>
<div class="full-width-col cols-12">
<?php while ( have_rows( "module_1" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<?php elseif ( get_row_layout() == 'two_width_cols' ) : ?>
<div class="half-width-col col-1 cols-6">
<?php while ( have_rows( "module_1" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="half-width-col col-2 cols-6 last">
<?php while ( have_rows( "module_2" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<?php elseif ( get_row_layout() == 'three_width_cols' ) : ?>
<div class="three-width-col col-1 cols-4">
<?php while ( have_rows( "module_1" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="three-width-col col-2 cols-4">
<?php while ( have_rows( "module_2" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="three-width-col col-3 cols-4 last">
<?php while ( have_rows( "module_3" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<?php elseif ( get_row_layout() == 'four_width_cols' ) : ?>
<div class="four-width-col col-1 cols-3">
<?php while ( have_rows( "module_1" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="four-width-col col-2 cols-3">
<?php while ( have_rows( "module_2" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="four-width-col col-3 cols-3">
<?php while ( have_rows( "module_3" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="four-width-col col-4 cols-3 last">
<?php while ( have_rows( "module_4" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<?php elseif ( get_row_layout() == 'five_width_cols' ) : ?>
<div class="five-width-col col-1 cols-2">
<?php while ( have_rows( "module_1" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="five-width-col col-2 cols-2">
<?php while ( have_rows( "module_2" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="five-width-col col-3 cols-2">
<?php while ( have_rows( "module_3" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="five-width-col col-4 cols-2">
<?php while ( have_rows( "module_4" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<div class="five-width-col col-5 cols-2 last">
<?php while ( have_rows( "module_5" ) ) : the_row();
get_layout_modules( get_row_layout() );
endwhile; ?>
</div>
<?php endif;
endwhile; ?>
</div> <!--end section-content-->
</section>
<?php endwhile;
else :
// no layouts found
endif;
}
function layout_module_slider() {
ob_start();
?><div class="layout-module-slider <?= get_sub_field('class'); ?>">
<?php
$files = get_sub_field('img_slider');
// pre is a function which wraps a value with print_r
pre($files); // <-- prints the "empty" array
if(count($files) > 0 ) {
echo slick_slider_func($files);
} else {
echo "No images available";
}
?>
</div><?php
return ob_get_clean();
}
ORIGINAL:
I have a nested repeater field inside layers of flexible contents. The purpose of which is to add images which are outputted to a slider.
The image ID's are stored in the database, but when I try to output them using get_sub_field, this is what i get:
I have build the field group programatically, which works in the backend as seen below. The backend equivalent for the above output:
The entire ACF settings/program:
if ( function_exists( 'acf_add_local_field_group' ) ):
add_action("init", "tryangle_generate_sections_fields");
function tryangle_generate_sections_fields() {
$indhold_gd = array(
'key' => 'group_indhold',
'title' => 'Indhold',
'fields' => array (),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'page',
),
),
),
'position' => 'acf_after_title',
'menu_order' => 0,
);
generate_fields( "indhold224466", $indhold_gd );
}
endif;
function generate_fields($uniqid, $group_data)
{
if(empty($uniqid) || empty($group_data)) return;
// Sets a unique affix on all keys
$uiq = $uniqid;
// Sets the group_data with locations etc.
$group_data['key'] = $group_data['key'] . '_' . $uiq;
// Available modules
$modules = array(
array(
'key' => '5b2cefcfdea9da_'.$uiq,
'name' => 'text',
'label' => 'Text',
'display' => 'block',
'sub_fields' => array(
array(
'key' => 'field_5b2d13ddfb10ba_'.$uiq,
'label' => 'Text',
'name' => 'text',
'type' => 'wysiwyg',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'tabs' => 'all',
'toolbar' => 'full',
'media_upload' => 1,
'delay' => 0,
),
),
'min' => '',
'max' => '',
),
array (
'key' => '5b3e2a167d2ee_'.$uiq,
'name' => 'image_slider',
'label' => 'Slider',
'display' => 'block',
'sub_fields' => array (
array (
'key' => 'field_5b3e2a3047a45_'.$uiq,
'label' => 'Slider',
'name' => 'img_slider',
'type' => 'repeater',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => 0,
'max' => 0,
'layout' => 'table',
'button_label' => 'Tilføj billede',
'sub_fields' => array (
array (
'key' => 'field_5b3e2a3b47a46_'.$uiq,
'label' => 'Billede',
'name' => 'img',
'type' => 'image',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '20',
'class' => '',
'id' => '',
),
'return_format' => 'array',
'preview_size' => 'thumbnail',
'library' => 'all',
'min_width' => '',
'min_height' => '',
'min_size' => '',
'max_width' => '',
'max_height' => '',
'max_size' => '',
'mime_types' => '',
),
array (
'key' => 'field_5b3e2a5647a47_'.$uiq,
'label' => 'Billedetekst',
'name' => 'img_text',
'type' => 'wysiwyg',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'tabs' => 'all',
'toolbar' => 'full',
'media_upload' => 1,
'delay' => 0,
),
),
),
),
'min' => '',
'max' => '',
),
array(
'key' => '5b2cf0bbbf1c9a_'.$uiq,
'name' => 'posts_slider',
'label' => 'Indlægsslider',
'display' => 'block',
'sub_fields' => array(
array(
'key' => 'field_5b2d13ddfb110a_'.$uiq,
'label' => 'Indlægskategori',
'name' => 'post_category',
'type' => 'taxonomy',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'taxonomy' => 'category',
'field_type' => 'select',
'allow_null' => 0,
'add_term' => 0,
'save_terms' => 0,
'load_terms' => 0,
'return_format' => 'object',
'multiple' => 0,
),
array(
'key' => 'field_5b2d13ddfb111a_'.$uiq,
'label' => 'Udseende',
'name' => 'style',
'type' => 'select',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'choices' => array(
'Slider' => 'Slider',
'Grid' => 'Grid',
),
'default_value' => array(),
'allow_null' => 0,
'multiple' => 0,
'ui' => 0,
'ajax' => 0,
'return_format' => 'value',
'placeholder' => '',
),
),
'min' => '',
'max' => '',
),
);
// Section columns
$columns = array(
array(
'key' => 'field_one_width_cols_'.$uiq,
'name' => 'one_width_cols',
'label' => 'En kolonne',
'display' => 'block',
'sub_fields' => array(
),
'min' => '',
'max' => '',
'cols' => 1,
),
array(
'key' => 'field_two_width_cols_'.$uiq,
'name' => 'two_width_cols',
'label' => 'To kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
'cols' => 2,
),
array(
'key' => 'field_three_width_cols_'.$uiq,
'name' => 'three_width_cols',
'label' => 'Tre kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
'cols' => 3,
),
array(
'key' => 'field_four_width_cols_'.$uiq,
'name' => 'four_width_cols',
'label' => 'Fire kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
'cols' => 4,
),
array(
'key' => 'field_five_width_cols_'.$uiq,
'name' => 'five_width_cols',
'label' => 'Fem kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
'cols' => 5,
)
);
/**
* Add columns to sections
*/
$loops = 1;
foreach ($columns as $key => $col)
{
// loop for the amount of columns available (5 columns)
for ($i = 1; $i <= $col['cols']; $i++) {
$width = 100 / $loops;
$columns[$key]['sub_fields'][] = array(
'key' => 'field_module_'.$i.'_'.$uiq,
'label' => 'Modul',
'name' => 'module_'.$i,
'type' => 'flexible_content',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => $width,
'class' => '',
'id' => '',
),
'min' => '',
'max' => '',
'button_label' => 'Tilføj modul',
'layouts' => $modules,
);
}
$loops++;
}
// Add field group "Indhold"
acf_add_local_field_group($group_data);
// Add sections to the "Indhold" field group
acf_add_local_field(array(
'parent' => 'group_indhold_'.$uiq,
'key' => 'field_sections_'.$uiq,
'label' => 'Sektioner',
'name' => 'sections',
'type' => 'flexible_content',
'button_label' => 'Tilføj sektion',
'layouts' => array(
array(
'key' => 'layout_section_'.$uiq,
'name' => 'section',
'label' => 'Sektion',
'display' => 'block',
'sub_fields' => array(
array(
'key' => 'field_section_'.$uiq,
'label' => 'Sektion',
'name' => 'section',
'type' => 'flexible_content',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'min' => '',
'max' => '',
'button_label' => 'Tilføj kolonner',
'layouts' => $columns,
),
array(
'key' => 'field_section_class_'.$uiq,
'label' => 'Sektion class',
'name' => 'class',
'type' => 'text',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'maxlength' => '',
),
),
),
),
));
}
Help is very much appreciated! I've been stuck with this the entire day now.
Thank you!
Ok, I'm not sure why it's empty:
pre($files); // <-- prints the "empty" array
However, you can replace this:
$files = get_sub_field('img_slider');
..with this: (manually build the data for $files)
$files = array();
if ( have_rows( 'img_slider' ) ) {
// Loop through the repeater's fields and manually fill in the `$files` array.
while ( have_rows( 'img_slider' ) ) : the_row();
if ( $image = get_sub_field( 'img' ) ) {
// These are just examples; just rename the keys, add more items, etc.
// it's all up to you.
$files[] = array(
'url' => $image['url'],
'text' => get_sub_field( 'img_text' ),
// ...
);
}
endwhile;
}
//var_dump( $files );
Additional Code
This loop may also help you, which I used to get to the slider items (i.e. image and its caption/text), starting from the sections field, which is the topmost-level field:
$post_id = false; // `false` defaults to the global `$post`
if ( have_rows( 'sections', $post_id ) ) :
while ( have_rows( 'sections', $post_id ) ) : the_row(); // loop #1
// With the current fields defined in `generate_fields()`, the 'class'
// is only available in loop #1.
$section_class = get_sub_field( 'class' );
echo '<div class="' . esc_attr( $section_class ) . '">'; // start the section
if ( have_rows( 'section' ) ) {
while ( have_rows( 'section' ) ) : the_row(); // loop #2
if ( have_rows( 'module_1' ) ) {
while ( have_rows( 'module_1' ) ) : the_row(); // loop #3
// In section #2 only.
the_sub_field( 'text' );
// In section #1 only.
if ( have_rows( 'img_slider' ) ) {
echo '<ul class="slider">';
while ( have_rows( 'img_slider' ) ) : the_row(); // loop #4
echo '<li class="slide-item">';
$image = get_sub_field( 'img' );
echo wp_get_attachment_image( $image['id'] );
the_sub_field( 'img_text' );
echo '</li>';
endwhile; // end loop #4
echo '</ul>';
}
endwhile; // end loop #3
}
endwhile; // end loop #2
}
echo '</div>'; // end section
endwhile; // end loop #1
endif;
Section #1 (image-slider)
Section #2 (lorem-ipsum)
I started over from scratch and redid all the fields in ACF, and added those programmatically carefully with uniquely generated keys (some of the keys were duplicates might have been the issue). The updated code now works thankfully.
Full code posted below (without output, should work with standard ACF docs).
I also added the crawler that replaces the field keys with unique keys.
Not sure where the fault lies in the original post, though this new code works and does entirely the same.
<?php
if ( function_exists( 'acf_add_local_field_group' ) ):
add_action("init", "tryangle_generate_sections_fields");
function tryangle_generate_sections_fields() {
$indhold_gd = array(
'key' => 'group_5b3f61bd82eba',
'title' => 'Indhold',
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'page',
),
),
),
'position' => 'acf_after_title',
'menu_order' => 0,
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => 1,
'description' => '',
);
generate_fields( "allpages", $indhold_gd );
}
endif;
/**
* Alters the ACF keys of the passed array, with the pass key affix
* #param $fields array Take ACF fields array as input.
* #param $randkey string String which is appended on the key
*
* #return array Returns passed array with altered keys
*/
function crawl_generate_keys($fields, $randkey) {
if(is_array($fields))
{
foreach ( $fields as $fk => $f )
{
if(!empty(is_array($fields[$fk]['sub_fields'])))
{
$fields[$fk]['sub_fields'] = crawl_generate_keys($fields[$fk]['sub_fields'], $randkey);
}
else if(!empty(is_array($fields[$fk]['layouts'])))
{
$fields[$fk]['layouts'] = crawl_generate_keys($fields[$fk]['layouts'], $randkey);
}
$fields[$fk]['key'] = $fields[$fk]['key'] . '_' . $randkey;
}
} else {
$fields['key'] = $fields['key'] . '_' . $randkey;
}
return $fields;
}
function generate_fields($uniqid, $gd)
{
// Declare the available layout modules
// The different layouts, such as slider, text field, statement slider
$layouts = array(
array (
'key' => '5b3f63d3bc38c_' . $uniqid,
'name' => 'text',
'label' => 'Text',
'display' => 'block',
'sub_fields' => array (
array (
'key' => 'field_5b3f641bb0588_' . $uniqid,
'label' => 'Text',
'name' => 'text',
'type' => 'wysiwyg',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'tabs' => 'all',
'toolbar' => 'full',
'media_upload' => 1,
'delay' => 0,
),
),
'min' => '',
'max' => '',
),
array (
'key' => '5b3f6425b0589_' . $uniqid,
'name' => 'slider',
'label' => 'Slider',
'display' => 'block',
'sub_fields' => array (
array (
'key' => 'field_5b3f6428b058a_' . $uniqid,
'label' => 'Slider',
'name' => 'slider',
'type' => 'repeater',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => '',
'min' => 0,
'max' => 0,
'layout' => 'table',
'button_label' => 'Tilføj billede',
'sub_fields' => array (
array (
'key' => 'field_5b3f642fb058b_' . $uniqid,
'label' => 'Billede',
'name' => 'image',
'type' => 'image',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '20',
'class' => '',
'id' => '',
),
'return_format' => 'array',
'preview_size' => 'thumbnail',
'library' => 'all',
'min_width' => '',
'min_height' => '',
'min_size' => '',
'max_width' => '',
'max_height' => '',
'max_size' => '',
'mime_types' => '',
),
array (
'key' => 'field_5b3f6453b058c_' . $uniqid,
'label' => 'Billede tekst',
'name' => 'image_text',
'type' => 'wysiwyg',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'tabs' => 'all',
'toolbar' => 'full',
'media_upload' => 1,
'delay' => 0,
),
),
),
array (
'key' => 'field_5b40ec12be700_' . $uniqid,
'label' => 'Slider class',
'name' => 'slider_class',
'type' => 'text',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'maxlength' => '',
),
),
'min' => '',
'max' => '',
),
array (
'key' => '5b3f64a5b058d_' . $uniqid,
'name' => 'statements',
'label' => 'Udtalelser',
'display' => 'block',
'sub_fields' => array (
array (
'key' => 'field_5b3f64b4b058e_' . $uniqid,
'label' => 'Udtalelser',
'name' => 'statements',
'type' => 'post_object',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'post_type' => array (
0 => 'udtalelser',
),
'taxonomy' => array (
),
'allow_null' => 0,
'multiple' => 1,
'return_format' => 'object',
'ui' => 1,
),
),
'min' => '',
'max' => '',
),
);
// Declare the avaialable columns
// The key indicates amount columns for that column
$columns = array (
1 => array (
'key' => '5b3f636009d7e1_' . $uniqid,
'name' => 'one_width_cols',
'label' => 'En kolonne',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
),
2 => array (
'key' => '5b3f636009d7e2_' . $uniqid,
'name' => 'two_width_cols',
'label' => 'To kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
),
3 => array (
'key' => '5b3f636009d7e3_' . $uniqid,
'name' => 'three_width_cols',
'label' => 'Tre kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
),
4 => array (
'key' => '5b3f636009d7e4_' . $uniqid,
'name' => 'four_width_cols',
'label' => 'Fire kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
),
5 => array (
'key' => '5b3f636009d7e5_' . $uniqid,
'name' => 'five_width_cols',
'label' => 'Fem kolonner',
'display' => 'block',
'sub_fields' => array(),
'min' => '',
'max' => '',
),
);
// Add layout modules to modules, add modules to columns
foreach ($columns as $k => $c)
{
// Loop for every module to be added to the column
for ($i = 1; $i <= $k; $i++)
{
$keyaffix = 'c' . $k . '_m' . $i;
$wrapperWidth = 100 / $k;
$insLayouts = crawl_generate_keys($layouts, $keyaffix);
$columns[$k]['sub_fields'][] = array(
'key' => 'field_5b3f63c1b0586_' . $keyaffix . '_' . $uniqid,
'label' => 'Modul',
'name' => 'module_' . $i,
'type' => 'flexible_content',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => $wrapperWidth,
'class' => '',
'id' => '',
),
'button_label' => 'Tilføj modul',
'min' => '',
'max' => '',
'layouts' => $insLayouts,
);
}
}
acf_add_local_field_group(array (
'key' => $gd['key'] . '_'. $uniqid,
'title' => $gd['title'],
'fields' => array (
array (
'key' => 'field_5b3f61c74f5b2_' . $uniqid,
'label' => 'Sektioner',
'name' => 'sections',
'type' => 'flexible_content',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'button_label' => 'Tilføj sektion',
'min' => '',
'max' => '',
'layouts' => array (
array (
'key' => '5b3f61ce24ec5_' . $uniqid,
'name' => 'section',
'label' => 'Sektion',
'display' => 'block',
'sub_fields' => array (
array (
'key' => 'field_5b3f6359b0585_' . $uniqid,
'label' => 'Sektion',
'name' => 'section',
'type' => 'flexible_content',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array (
'width' => '',
'class' => '',
'id' => '',
),
'button_label' => 'Tilføj kolonner',
'min' => '',
'max' => '',
'layouts' => $columns,
),
),
'min' => '',
'max' => '',
),
),
),
),
'location' => $gd['location'],
'menu_order' => $gd['menu_order'],
'position' => $gd['position'],
'style' => $gd['style'],
'label_placement' => $gd['label_placement'],
'instruction_placement' => $gd['instruction_placement'],
'hide_on_screen' => $gd['hide_on_screen'],
'active' => $gd['active'],
'description' => $gd['description'],
));
}

get acf fields from php file

I put this code into my functions.php
include_once('advanced-custom-fields/acf.php');
include_once('acf-options-page/acf-options-page.php');
include_once('acf-repeater/acf-repeater.php');
define( 'ACF_LITE', true );
if(function_exists("register_field_group"))
{
register_field_group(array (
'id' => 'acf_options',
'title' => 'Options',
'fields' => array (
array (
'key' => 'field_525d1b6d49043',
'label' => 'lable',
'name' => 'homepage',
'type' => 'repeater',
'instructions' => 'Select which categories you want to display on the homepage.',
'sub_fields' => array (
array (
'key' => 'field_525d1b8a49044',
'label' => 'Category',
'name' => 'firsttext',
'type' => 'text',
'column_width' => '',
'field_type' => 'text',
'return_format' => 'id',
),
array (
'key' => 'field_525d2473de72c',
'label' => 'Number of Posts',
'name' => 'number-of-posts',
'type' => 'text',
'column_width' => '',
'default_value' => 4,
'placeholder' => '',
'prepend' => '',
'append' => '',
'min' => 2,
'max' => '',
'step' => 2,
),
),
'row_min' => 1,
'row_limit' => 1,
'layout' => 'row',
'button_label' => 'Add a category',
),
),
'location' => array (
array (
array (
'param' => 'options_page',
'operator' => '==',
'value' => 'acf-options',
'order_no' => 0,
'group_no' => 0,
),
),
),
'options' => array (
'position' => 'normal',
'layout' => 'no_box',
'hide_on_screen' => array (
),
),
'menu_order' => 0,
));
}
Then I enter values into fields in admin console
How I cat get this value from page file?
I try get_field('acf_options) and I try get_field('homepage), but this return null
Im not sure why you would want to put this in your function.php file instead of just do this this through the plugin.
But if you want to retrieve those field values, you should do this: get_field( 'homepage', 'option' );
instead of:
get_field( 'homepage' ) or get_field( 'acf_options' );
My best advice would be to look on the ACF website for information. These docs help out a lot!

create custom content type with custom table fields in drupal 7

I want to create a module in which, when I install that module, it should create custom table defined in homepage_blocks_schema(), create content-type defined in homepage_blocks_install() and in that content type, create custom fields same as my schema.
Here is function,
function homepage_blocks_schema() {
$schema['homepage_blocks'] = array(
'fields' => array(
'hid' => array(
'type' => 'int',
'length' => 11,
'unsigned' => TRUE,
'not null' => TRUE,
),
'title' => array(
'type' => 'varchar',
'length' => 255,
),
'image' => array(
'type' => 'varchar',
'length' => 255,
),
),
'primary key' => array('hid'),
);
return $schema;
}
homepage_blocks_install() {
$homepage_blocks = array(
'type' => 'homepage_blocks',
'name' => $t('Homepage Blocks'),
//'base' => 'node_content',
'base' => 'homepage_blocks',
'custom' => true,
'modified' => true,
'locked' => false,
'title_label' => $t('Homepage Blocks')
);
$content_type = node_type_set_defaults($homepage_blocks);
//node_add_body_field($content_type, 'Body'); // add the body field to the content type
node_type_save($content_type); // create the content type
variable_set('node_options_homepage_blocks', array('status'));
variable_set('comment_homepage_blocks', 'COMMENT_NODE_HIDDEN'); // hide comments for this node.
variable_set('node_submitted_homepage_blocks', false); // Hide date and author information
//drupal_install_schema('homepage_blocks');
foreach (_homepage_blocks_installed_fields() as $field) { // Create all the fields we are adding to our content type.
//krumo(field_create_field($field));
field_create_field($field);
}
foreach (_homepage_blocks_installed_instances() as $instance) { // Create all the instances for our fields.
$instance['entity_type'] = 'node';
$instance['bundle'] = 'homepage_blocks';
field_create_instance($instance);
}
}
function _homepage_blocks_installed_fields() {
$t = get_t();
$fields = array(
'hmblock_title' => array(
'field_name' => 'hmblock_title',
'label' => $t('Title'),
//'cardinality' => 1,
'type' => 'text',
'settings' => array(
'max_length' => 255,
),
),
'hmblock_image' => array(
'field_name' => 'hmblock_image',
'label' => $t('Image'),
//'cardinality' => 1,
'type' => 'image',
'settings' => array(
'default_image' => 0,
'uri_scheme' => 'public',
),
),
);
//$fields = drupal_get_schema('homepage_blocks');
return $fields;
}
function _homepage_blocks_installed_instances() {
$t = get_t();
$instances = array(
'hmblock_title' => array(
'field_name' => 'hmblock_title',
'label' => $t('Title'),
'cardinality' => 1,
'widget' => array(
'type' => 'text_textfield',
'settings' => array('size' => 255),
),
),
'hmblock_image' => array(
'field_name' => 'hmblock_image',
'label' => $t('Image'),
'cardinality' => 1,
'type' => 'image',
'settings' => array(
'alt_field' => 1,
'file_directory' => 'image',
'file_extensions' => 'png gif jpg jpeg',
'max_filesize' => '50mb',
'max_resolution' => '',
'min_resolution' => '',
'title_field' => 1,
'user_register_form' => FALSE,
),
'widget' => array(
'settings' => array(
'preview_image_style' => 'thumbnail',
'progress_indicator' => 'throbber',
),
)
),
);
return $instances;
}
This code creates table and content type but not its fields..
Can anyone help ?
There is an easier way
you can create your custom type using drupal core and fields module and then export it into a module using Features module.
You can find a full guide here : Bundling site settings using Features

Resources