How to get wordpress option tree list item data - php

i use option tree list item for getting social icon & links.but i cannot get data from backend.
array(
'id' => 'social_icon',
'label' => __( 'Footer Social Icons & links', 'theme-text-domain' ),
'desc' => __( '', 'theme-text-domain' ),
'std' => '',
'type' => 'list-item',
'section' => 'header_footer',
'rows' => '',
'post_type' => '',
'taxonomy' => '',
'min_max_step'=> '',
'class' => '',
'condition' => '',
'operator' => 'and',
'settings' => array(
array(
'id' => 'social_icon_fb',
'label' => __( 'link', 'theme-text-domain' ),
'desc' => '',
'std' => '',
'type' => 'text',
'rows' => '10',
'post_type' => '',
'taxonomy' => '',
'min_max_step'=> '',
'class' => '',
'condition' => '',
'operator' => 'and'
),
array(
'id' => 'social_icon_upl',
'label' => __( 'icon', 'theme-text-domain' ),
'desc' => 'the best sixe for icon is 31x31.',
'std' => '',
'type' => 'upload',
'rows' => '10',
'post_type' => '',
'taxonomy' => '',
'min_max_step'=> '',
'class' => '',
'condition' => '',
'operator' => 'and'
),
)
)
and i want to use this in
<ul id="icons">
<li>
<img src="<?php get_option_tree( 'social_icon_upl', '', 'true' ); ?>" alt="">
</li>
</ul>
i use this to get data from backend.is this correct?? if no so what should be the code to get data.

Try this code
<?php
if ( function_exists( 'ot_get_option' ) ) {
/* get the slider array */
$slides = ot_get_option( 'social_icon', array() );
if ( ! empty( $slides ) ) {
foreach( $slides as $slide ) {
echo '
<li>
<img src="'.$slide['social_icon_upl'].'" alt="">
</li>
';
}
}
}
?>

list item always return array. you have to use foreach loop for getting every row of array. code is describe bellow.
*<?php
if ( function_exists( 'ot_get_option' ) ) {
$your_listitems_array = ot_get_option( 'your_listitems_slug', array() );
if ( ! empty( $your_listitems_array ) ) {
foreach( $your_listitems_array as $your_listitem) {
echo $your_listitem['your_listitem_option_slug'];
}
}
}
?>*

Related

How to get values of multiple nested arrays in PHP?

This is a shorter version of my question from How to get values only from a PHP array inside multiple nested Arrays without knowing value? so hoping someone can help.
MAIN ISSUE I don't know what to call to get things inside ARRAY
What I need is inside that Array of Extras. I've duplicated & modified everything I can to get these values but can't seem to figure it out. Any help is really appreciated.
The registration, milage, condition shown is the output of $autoshowroom_portfolio_specifications_arr
array (
'label' => __( 'Checkboxes field', 'progression-car-dealer' ),
'name' => 'pcd_checkboxes',
'display' => 'table',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_52816dc9ffee11',
'label' => __( 'Checkboxes to Customize', 'progression-car-dealer' ),
'name' => 'pcd_checkboxes',
'type' => 'checkbox',
'instructions' => __( 'Selected fields will be used', 'progression-car-dealer' ),
'choices' => $choices,
'default_value' => '',
'layout' => 'horizontal',
)
),
),
More code
array(
'id' => 'autoshowroom_Detail_show_extras',
'label' => esc_html__('Show Extras', 'autoshowroom'),
'desc' => '',
'sdt' => 'yes',
'type' => 'select',
'section' => 'TZVehicleDetail',
// 'section' => 'TZVehicle',
'choices' => array(
array(
'value' => 'yes',
'label' => esc_html__('Show', 'autoshowroom'),
),
array(
'value' => 'no',
'label' => esc_html__('Hide', 'autoshowroom'),
)
)
),
$car_extras = array_unique( array_merge( array (
__( 'Auxiliary heating', 'progression-car-dealer' ),
__( 'ABS', 'progression-car-dealer' ),
__( 'Central locking', 'progression-car-dealer' ),
__( 'Power Assisted Steering', 'progression-car-dealer' ),
__( 'Cruise control', 'progression-car-dealer' ),
__( 'Immobilizer', 'progression-car-dealer' ),
__( 'Warranty', 'progression-car-dealer' ),
__( 'Electric windows', 'progression-car-dealer' ),
__( 'Financing', 'progression-car-dealer' ),
__( 'Another', 'progression-car-dealer' ),
__( 'Last', 'progression-car-dealer' ),
), $this->get_meta_values( 'extras', 'vehicle' ) ));
$car_extras = array_combine( $car_extras, $car_extras);
More code
public function register_field( $args ) {
// ACF requires a unique key per field so lets generate one
$key = md5( serialize( $args ));
if ( empty( $args['type'] )) {
$args['type'] = 'number';
}
$type = $args['type'];
if ( 'taxonomy' == $type ) {
$field = wp_parse_args( $args, array(
'key' => $key,
'label' => '',
'name' => '',
'type' => 'taxonomy',
'instructions' => '',
'taxonomy' => '',
'field_type' => 'select',
'allow_null' => 1,
'load_save_terms' => 1,
'return_format' => 'id',
'multiple' => 0,
'sort' => 0,
'group' => 'overview'
) );
} else if ( 'radio' == $type ) {
$field = wp_parse_args( $args, array (
'key' => $key,
'label' => '',
'name' => '',
'instructions' => '',
'choices' => array(),
'other_choice' => 1,
'save_other_choice' => 1,
'default_value' => '',
'layout' => 'horizontal',
'sort' => 0,
'group' => 'specs'
) );
} else if ( 'checkbox' == $type ) {
$field = wp_parse_args( $args, array (
'key' => $key,
'label' => '',
'name' => '',
'instructions' => '',
'choices' => array(),
'layout' => 'vertical',
'sort' => 0,
'multiple' => 1,
'group' => 'specs'
) );
} else {
$field = wp_parse_args( $args, array (
'key' => $key,
'label' => '',
'name' => '',
'type' => 'number',
'instructions' => '',
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'min' => 0,
'max' => '',
'step' => '',
'sort' => 0,
'group' => 'specs'
) );
}
$field = apply_filters( 'pcd/register_field', $field );
$this->fields[$field['name']] = $field;
More code
'extras' => array(
'label' => __( 'Extras', 'progression-car-dealer' ),
'name' => 'extras',
'type' => 'checkbox',
'choices' => $car_extras,
'other_choice' => 55,
'save_other_choice' => 55,
'default_value' => '',
'layout' => 'horizontal',
'sort' => 95,
),

Wordpress customizer (kirki) page list / sortable

I'm trying to put in place a sortable field where the options value are the page titles,
I'm using Kirki plugin,
How can i do that ?
here's is the code
Thanks a lot for your time
Using theme_mods or options?
theme_mods
Code to reproduce the issue (config + field(s))
<?php
$pages = get_pages();
foreach ($pages as $page ) {
$pages_list[] = array ('id' => $page->ID, 'title' => $page->post_title);
};
print_r($pages_list);
Kirki::add_field( 'my_config', array(
'type' => 'sortable',
'settings' => 'my_setting',
'label' => __( 'This is the label', 'my_textdomain' ),
'section' => 'my_section',
'default' => array(
'option3',
'option1',
'option4'
),
'choices' => $pages_list,
'priority' => 10,
) );
?>
got it !
$pages_array = array();
$get_pages = get_pages( 'hide_empty=0' );
foreach ( $get_pages as $page ) {
$pages_array[$page->ID] = esc_attr( $page->post_title );
}
Kirki::add_field( '_s_theme', array(
'type' => 'sortable',
'settings' => 'sort',
'label' => __( 'This is the label', 'my_textdomain' ),
'section' => 'sections',
'default' => array(),
'choices' => $pages_array,
'priority' => 10,
) );

How can I use the Advanced Custom Fields plugin with WordPress Media Library?

I'm using the Advanced Custom Fields WordPress plugin to add a category selector to images in my media library. Eventually I would to show all the images that have a specific category.
When I get everything from the library, I'd like to grab the selected category and add it to my $image array, but when I call the_field() and/or get_field() it returns nothing.
This call is outside the WordPress post loop, so I passed each attachment's ID (as per the documentation and this question), but that does not appear to work either.
Am I missing something?
index.php:
<div id="content">
<div id="inner-content" class="wrap cf">
<main id="main" class="cf" role="main" >
<?php echo get_images_from_media_library(); ?>
</main>
</div>
</div>
functions.php:
function get_images_from_media_library() {
$args = array(
'post_type' => 'attachment',
'post_mime_type' =>'image',
'post_status' => 'inherit',
'posts_per_page' => 100,
'orderby' => 'rand',
'post_parent' => $post->ID
);
$attachments = get_posts($args);
$images = array();
if ($attachments) {
foreach ($attachments as $attachment) {
$image = array(
'id' => $attachment->ID,
'src' => $attachment->guid,
'title' => $attachment->post_title,
'tags' => wp_get_post_tags($attachment->ID)
);
array_push($images, $image);
// For debug purposes
// Always returns 'FAILED'...
if ( get_field('category_select', $attachment->ID) ) {
$category = get_field('category_select', $attachment->ID);
echo '<h1>Category: '.$category.'</h1>';
} else {
echo '<h1>FAILED</h1>';
}
//TODO: Add $category to $images.
echo "<div class='gallery'>";
echo '<img src="'.$image['src'].'" class="col span-lg-1-md-2-sm-5 / gallery__image / '.$image['title'].'">';
echo "</div>";
}
}
}
EDIT:
Added the field group export code:
if(function_exists("register_field_group"))
{
register_field_group(array (
'id' => 'acf_media-category',
'title' => 'Media Category',
'fields' => array (
array (
'key' => 'field_56aa8c5f67f98',
'label' => 'Category',
'name' => 'category_select',
'type' => 'radio',
'required' => 1,
'choices' => array (
'icon' => 'Icon',
'logo' => 'Logo',
'cover' => 'Cover',
),
'other_choice' => 0,
'save_other_choice' => 0,
'default_value' => 'icon : Icon',
'layout' => 'vertical',
),
),
'location' => array (
array (
array (
'param' => 'ef_media',
'operator' => '==',
'value' => 'all',
'order_no' => 0,
'group_no' => 0,
),
),
),
'options' => array (
'position' => 'normal',
'layout' => 'no_box',
'hide_on_screen' => array (
),
),
'menu_order' => 0,
));
}

How to Save the Repeatable fields data in Reusable Custom box WordPress?

hello I am using reusable custom metaboxes from https://github.com/tammyhart/Reusable-Custom-WordPress-Meta-Boxes..
these are my fields
array(
'label' => __('Setup Slider', 'crispy' ),
'desc' => __('create your slider image/ text using these repeatable options', 'crispy' ),
'id' => $prefix.'repeatable',
'type' => 'repeatable',
'sanitizer' => array(
'title' => 'sanitize_text_field',
'desc' => 'wp_kses_data'
),
'repeatable_fields' => array (
array(
'label' => __(' Slider Text alignment', 'crispy'),
'id' => 'alignment',
'type' => 'radio',
'options' => array (
'one' => array (
'label' => __('Left', 'crispy' ),
'value' => 'left'
),
'two' => array (
'label' => __('Center', 'crispy' ),
'value' => 'center'
),
'three' => array (
'label' => __('Right', 'crispy' ),
'value' => 'right'
)
)
),
array(
'label' => __('Background Image/pattern', 'crispy' ),
'id' => 'image',
'type' => 'image'
),
array(
'label' => __('Title', 'crispy' ),
'id' => 'title',
'type' => 'text'
),
array(
'label' => __('Description', 'crispy' ),
'id' => 'desc',
'type' => 'textarea'
),
)
),
My problem is i don't know how to store the fields value... can anyone resolve my problem!!..
$home_slider_alignment = get_post_meta( $post->ID, 'alignment', true);
i used this but doesn't help!!.. Those fields can be repeatable so the values are stored in array!!.. i don't know how to retrieve stored values from that array??..
Please help me!!.
It is working :)
enter code here
<?php
$projectgallery = get_post_meta($post->ID, 'arcadia_well_projectgallery', true); {
echo '<ul class="custom_repeatable">';
foreach ($projectgallery as $project) {
echo '<li>';
foreach($project as $i=>$value) {
echo $value;
}
echo '</li>';
}
echo '</ul>';
}
?>

ACF - Looping thru posts, then thru flexible content, then thru repeater

What I am trying to do is get images from a repeater field and fill my homepage with images that lead to posts.
This is usually easy for me but the catch here is that there are multiple images for each post in a repeater field, which are in a flexible content field of the advanced custom fields plugin.
The goal is to have an unlimited amount of images coming from the 'square_image' field in completely random order on the homepage that lead to their particular post. So with 15 posts that each have 15 'square_images' there would be 225 images on the homepage in completely random placement linking to their respective posts.
I am wondering if I need to build an array inside the while loops so that I can get that ultimate random order at the end, instead of just the first 15 images from post 1 in random order, and then the next 15 images from post 2 in a random order which is not what i am trying to do.
<?php get_header(); /* Template Name: Homepage Looper */ ?>
<div id="homepage">
<?php
// the query
$args = array(
'post_type' => 'projects',
'posts_per_page' => '-1',
'orderby' => 'rand',
);
$the_query = new WP_Query( $args );$count = 1; ?>
<?php if ( $the_query->have_posts() ) : ?>
<div class="row">
<!-- the loop -->
<?php
while ( $the_query->have_posts() ) : $the_query->the_post();
if( have_rows('the_page_content') ):
while ( have_rows('the_page_content') ) : the_row();
if(get_sub_field('images')) :
while(has_sub_field('images')) : the_row();
?>
<?php
$image = get_sub_field('square_image');
if ( !empty($image) ):
// vars
$url = $image['url'];
$title = $image['title'];
$alt = $image['alt'];
?>
<div class="col-xs-6 col-sm-4 col-md-3 col-lg-2 home-tile-holder">
<a href="<?php the_permalink(); ?>" rel="<?php the_title(); ?>">
<img src="<?php echo $url; ?>" alt="<?php echo $alt; ?>" class="img-responsive home-tile" />
<span class="title"><?php the_title(); ?><br><img src="<?php echo get_stylesheet_directory_uri(); ?>/img/magnify.png"></span>
</a>
</div>
<?php endif; ?>
<?php
if($count % 6 == 0) {echo '</div><div class="row">';}
$count++;
?>
<?php
endwhile; // while(has_sub_field('images')
endif; // get_sub_field('images')
endwhile; // have_rows('the_page_content')
endif; // have_rows('the_page_content')
endwhile; // $the_query->have_posts ?>
<!-- end of the loop -->
</div>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; // $the_query->have_posts ?>
</div>
<div id="single_project" style="position: absolute; margin-left:100%; width:100%;">
</div>
<?php get_footer(); ?>
THE ACF EXPORT IS BELOW
if(function_exists("register_field_group"))
{
register_field_group(array (
'id' => 'acf_project-fields',
'title' => 'Project Fields',
'fields' => array (
array (
'key' => 'field_534efd890cd30',
'label' => 'Hero Image',
'name' => 'hero_image',
'type' => 'image',
'instructions' => 'Upload the large version for this post that will be used as the hero image on the top of the page.',
'save_format' => 'url',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_534efdb70cd31',
'label' => 'Page Content',
'name' => 'the_page_content',
'type' => 'flexible_content',
'instructions' => 'Build out the content for this project.',
'layouts' => array (
array (
'label' => 'Image Row',
'name' => 'image_row',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_534efdea0cd32',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716523cfc52',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716532cfc53',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => 1,
'row_limit' => 6,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
),
),
array (
'label' => 'Text + Images',
'name' => 'text_images',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_5356d3a6a8ac9',
'label' => 'Title',
'name' => 'title',
'type' => 'text',
'instructions' => 'Enter in the title of this project if you wish for it to show above the text.',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'formatting' => 'html',
'maxlength' => '',
),
array (
'key' => 'field_534eff4ae5d31',
'label' => 'Text Content',
'name' => 'text_content',
'type' => 'wysiwyg',
'column_width' => '',
'default_value' => '',
'toolbar' => 'full',
'media_upload' => 'yes',
),
array (
'key' => 'field_534eff32e5d30',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716549cfc54',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716557cfc55',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => '',
'row_limit' => 3,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
),
),
array (
'label' => 'Images + Text',
'name' => 'images_text',
'display' => 'row',
'min' => '',
'max' => '',
'sub_fields' => array (
array (
'key' => 'field_534effafb045d',
'label' => 'Images',
'name' => 'images',
'type' => 'repeater',
'column_width' => '',
'sub_fields' => array (
array (
'key' => 'field_53716567cfc56',
'label' => 'Square Image',
'name' => 'square_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
array (
'key' => 'field_53716576cfc57',
'label' => 'Full Size Image',
'name' => 'full_size_image',
'type' => 'image',
'column_width' => '',
'save_format' => 'object',
'preview_size' => 'thumbnail',
'library' => 'all',
),
),
'row_min' => '',
'row_limit' => 3,
'layout' => 'table',
'button_label' => 'Add Image Set',
),
array (
'key' => 'field_5356d3dba8aca',
'label' => 'Title',
'name' => 'title',
'type' => 'text',
'instructions' => 'Enter in the title of this project if you wish for it to show above the text.',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
'formatting' => 'html',
'maxlength' => '',
),
array (
'key' => 'field_534effafb045c',
'label' => 'Text Content',
'name' => 'text_content',
'type' => 'textarea',
'column_width' => '',
'default_value' => '',
'placeholder' => '',
'maxlength' => '',
'rows' => '',
'formatting' => 'br',
),
),
),
),
'button_label' => 'Add Row',
'min' => '',
'max' => '',
),
),
'location' => array (
array (
array (
'param' => 'post_type',
'operator' => '==',
'value' => 'projects',
'order_no' => 0,
'group_no' => 0,
),
),
),
'options' => array (
'position' => 'normal',
'layout' => 'no_box',
'hide_on_screen' => array (
0 => 'the_content',
1 => 'excerpt',
2 => 'custom_fields',
3 => 'discussion',
4 => 'comments',
5 => 'format',
6 => 'featured_image',
7 => 'send-trackbacks',
),
),
'menu_order' => 0,
));
}
Create an array of the images during the initial posts loop, randomize that array, then output the html in a loop through the images array.
<?php
$args = array(
'post_type' => 'projects',
'posts_per_page' => '-1',
'orderby' => 'rand',
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
$images = array();
while ( $the_query->have_posts() ) : $the_query->the_post();
if( have_rows('the_page_content') ):
while ( have_rows('the_page_content') ) : the_row();
if( have_rows('images') ) :
while( have_rows('images') ) : the_row();
$image = get_sub_field('square_image');
if ( !empty($image) ):
// add image properties and related data to main images array
$images[] = array(
'url' => $image['url'],
'title' => $image['title'],
'alt' => $image['alt'],
'postdata' => array(
'id' => get_the_ID(),
'title' => get_the_title(),
'permalink' => get_permalink()
)
);
endif;
endwhile; // while(have_rows('images'))
endif; // have_rows('images')
endwhile; // have_rows('the_page_content')
endif; // have_rows('the_page_content')
endwhile; // $the_query->have_posts
wp_reset_postdata();
endif; // $the_query->have_posts
// Loop through the images array and output html for each image
shuffle($images); // Randomize the order of the images
$count = 1;
foreach($images as $img) :
?>
<div class="row">
<div class="col-xs-6 col-sm-4 col-md-3 col-lg-2 home-tile-holder">
<a href="<?php echo $img['postdata']['permalink']; ?>" rel="<?php echo $img['postdata']['title']; ?>">
<img src="<?php echo $img['url']; ?>" alt="<?php echo $img['alt']; ?>" class="img-responsive home-tile" />
<span class="title"><?php $img['postdata']['title']; ?><br><img src="<?php echo get_stylesheet_directory_uri(); ?>/img/magnify.png"></span>
</a>
</div>
<?php if($count % 6 == 0) echo '</div><div class="row">';?>
<?php $count++; ?>
<?php endforeach; ?>
</div>

Categories