I Tried to change the last query with this one
<?php
// An array of arguments
$args = array(
'post_status' => 'publish',
'post_type' => 'show-item',
'posts_per_page' => $params['number_of_items'],
'orderby' => $params['orderby'],
'order' => $params['order'],
'meta_query' => array( // WordPress has all the results, now, return only the events after today's date
array(
'key' => 'date_de_debut', // Check the start date field
'value' => date("Y-m-d"), // Set today's date (note the similar format)
'compare' => '>=', // Return the ones greater than today's date
'type' => 'DATE' // Let WordPress know we're working with date
)
),
);
$field = get_field('date_de_debut');
if (!empty ($field)) {
$args['meta_key'] = 'date_de_debut';
$args['orderby'] = 'meta_value';
}
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) : $the_query->the_post();
$single_params = array();
$single_params['title_tag'] = $title_tag;
$single_params['show_single_layout'] = $show_single_layout;
$single_params['show_id'] = get_the_ID();
$single_params['article_classes'] = $this_object->getArticleClasses( $params );
$single_params['show_category'] = $show_category;
$single_params['show_date_range'] = $show_date_range;
$single_params['image_proportions'] = $image_proportions;
echo musea_elated_execute_shortcode('eltdf_show_single', $single_params);
endwhile;
} else {
esc_html_e( 'Sorry, no posts matched your criteria.', 'musea-shows' );
}
/* Restore original Post Data */
wp_reset_postdata();
?>
Butsame problem. Any idea?
Oh yeah sorry this is the real query
<?php
if($query_results->have_posts()):
while ( $query_results->have_posts() ) : $query_results->the_post();
$single_params = array();
$single_params['title_tag'] = $title_tag;
$single_params['show_single_layout'] = $show_single_layout;
$single_params['show_id'] = get_the_ID();
$single_params['article_classes'] = $this_object->getArticleClasses( $params );
$single_params['show_category'] = $show_category;
$single_params['show_date_range'] = $show_date_range;
$single_params['image_proportions'] = $image_proportions;
echo musea_elated_execute_shortcode('eltdf_show_single', $single_params);
endwhile;
else:
esc_html_e( 'Sorry, no posts matched your criteria.', 'musea-shows' );
endif;
wp_reset_postdata();
?>
$query_array = array(
'post_status' => 'publish',
'post_type' => 'show-item',
'posts_per_page' => $params['number_of_items'],
'meta_key' => 'date_de_debut',
'orderby' => 'meta_value',
'order' => $params['order']
);
This code works well. The only problem is that the order posts does not match the criteria so it returns: no post match your criteria.
I just need to change the orderby and the meta_key if get_field(‘date_de_debut) is not empty
yeah this is not the output but it takes tu arguments here:
public function getQueryArray($params){
$query_array = array(
'post_status' => 'publish',
'post_type' => 'show-item',
'posts_per_page' => $params['number_of_items'],
'orderby' => $params['orderby'],
'order' => $params['order']
);
$field = get_field('date_de_debut');
if (!empty ($field)) {
$query_array['meta_key'] = 'date_de_debut';
$query_array['orderby'] = 'meta_value';
}
So there is probably a solution there !
It comes from a theme that we bought 🙂
public function render($atts, $content = null) {
$args = array(
'type' => 'gallery',
'number_of_columns' => '3',
'space_between_items' => 'normal',
'number_of_items' => '-1',
'category' => '',
'selected_shows' => '',
'title_tag' => 'h5',
'image_proportions' => 'full',
'enable_fixed_proportions' => 'no',
'show_category' => 'no',
'show_date_range' => 'no',
'orderby' => 'date',
'order' => 'ASC',
'show_single_layout' => 'info-bellow',
'show_slider' => 'no',
'slider_navigation' => 'no',
'slider_pagination' => 'no',
'pagination_type' => 'standard',
'load_more_top_margin' => '',
'slider_autoplay' => 'no'
);
$params = shortcode_atts($args, $atts);
/***
* @params query_results
* @params holder_data
* @params holder_classes
*/
$additional_params = array();
$query_array = $this->getQueryArray($params);
$query_results = new \WP_Query($query_array);
$additional_params['query_results'] = $query_results;
$additional_params['holder_data'] = musea_elated_get_holder_data_for_cpt( $params, $additional_params );
$additional_params['holder_classes'] = $this->getHolderClasses($params, $args);
$additional_params['inner_classes'] = $this->getInnerClasses($params);
$additional_params['data_attrs'] = $this->getDataAttribute($params);
$params['this_object'] = $this;
$html = musea_shows_get_cpt_shortcode_module_template_part('shows', 'show-list', 'show-holder', $params['type'], $params, $additional_params);
return $html;
}
/**
* Generates show list query attribute array
*
* @param $params
*
* @return array
*/
public function getQueryArray($params){
$query_array = array(
'post_status' => 'publish',
'post_type' => 'show-item',
'posts_per_page' => $params['number_of_items'],
'orderby' => $params['orderby'],
'order' => $params['order']
);
$field = get_field('date_de_debut');
if (!empty ($field)) {
$query_array['meta_key'] = 'date_de_debut';
$query_array['orderby'] = 'meta_value';
}
if(!empty($params['category'])){
$query_array['show-category'] = $params['category'];
}
$show_ids = null;
if (!empty($params['selected_shows'])) {
$show_ids = explode(',', $params['selected_shows']);
$query_array['post__in'] = $show_ids;
}
if ( ! empty( $params['next_page'] ) ) {
$query_array['paged'] = $params['next_page'];
} else {
$query_array['paged'] = 1;
}
return $query_array;
}
public function getLoadMoreStyles( $params ) {
$styles = array();
if ( ! empty( $params['load_more_top_margin'] ) ) {
$margin = $params['load_more_top_margin'];
if ( musea_elated_string_ends_with( $margin, '%' ) || musea_elated_string_ends_with( $margin, 'px' ) ) {
$styles[] = 'margin-top: ' . $margin;
} else {
$styles[] = 'margin-top: ' . musea_elated_filter_px( $margin ) . 'px';
}
}
return implode( ';', $styles );
}
Yeah ! It’s working well with both code 🙂
The only problem is here
$value = get_field(‘date_de_debut’);
I think that $value is always empty.
An other example if I use this:
$value = get_field('date_de_debut');
if (empty($value)) {
$query_array[‘meta_key’] = ‘date_de_debut’;
$query_array[‘orderby’] = ‘meta_value’;$
}
The order change and works well according to the meta_key ‘date_de_debut’
They all have a value, this snippet replace the existing value
if (get_field(‘date_de_debut’)) {
$query_array[‘meta_key’] = ‘date_de_debut’;
$query_array[‘orderby’] = ‘meta_value’;
}
I think this has to be with the post ID. But why is it working if I use this:
$query_array = array(
‘post_status’ => ‘publish’,
‘post_type’ => ‘show-item’,
‘posts_per_page’ => $params[‘number_of_items’],
‘orderby’ => ‘meta_value’,
‘meta_key’ => ‘date_de_debut’,
‘order’ => $params[‘order’]
);
It’s working well with the IF condition so this is not the problem 🙂 The problem is that the variable is always empty even if I ise get_field() or the_field() 🙂
If I use this code like this (without the if) it’s ordering like a charm !
$query_array = array(
‘post_status’ => ‘publish’,
‘post_type’ => ‘show-item’,
‘posts_per_page’ => $params[‘number_of_items’],
‘orderby’ => $params[‘orderby’],
‘order’ => $params[‘order’]
);
$query_array[‘meta_key’] = ‘date_de_debut’;
$query_array[‘orderby’] = ‘meta_value’;
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.