目前我使用以下函数给出 ACF 字段的最小编号。该代码可以工作,但不是最聪明、最节省资源的方式。
add_shortcode( 'LEASINGFAKTOR', 'leaserate_shortcode' );
function leaserate_shortcode () {
$args = array(
'posts_per_page'=> -1,
'post_type' => 'fahrzeuge',
'meta_key' => 'leasingfaktor',
);
$low_rate_query = new WP_Query( $args );
$rate = array();
if( $low_rate_query->have_posts() ):
while( $low_rate_query->have_posts() ) : $low_rate_query->the_post();
$rate = get_field('leasingfaktor');
if(isset($rate) && !empty($rate)){
$rates[] = $rate;
}
endwhile;
$max_rate = max($rates);
$min_rate = min($rates);
endif; wp_reset_query();
return $min_rate;
}
有什么让它更清洁、更快、更智能的想法吗?
好吧,您可以使用
get_posts
而不是使用 WP_Query
,因为您只需要可以与 get_field
一起使用的帖子 ID 数组,并且使用 get_posts
您不需要执行 while
循环,和wp_reset_query
您可以做的另一项改进是使用
array_map
而不是 foreach
,因为您不会尝试在此处生成任何 HTML 或不执行任何复杂的操作。你只是想获得一个 rates
数组,所以 array_map
在这种情况下更好,并且易于使用,代码会很短。
所以使用
get_posts
和 array_map
的最终代码将如下所示:
/**
* Shortcode function
*/
function leaserate_shortcode() {
$query_args = array(
'posts_per_page' => -1,
'post_type' => 'fahrzeuge',
'meta_key' => 'leasingfaktor', // phpcs:ignore WordPress.DB.SlowDBQuery
'fields' => 'ids', // We just need ids for our work.
);
/**
* We will use get_posts instead of using WP_Query
* Because it's easy to use in this case and $no_found_rows
* is set to false that will give fast performance
*/
$post_ids = get_posts( $query_args );
// Set default min rate.
$min_rate = 0;
// Check if we found ids or not.
if ( ! empty( $post_ids ) ) {
/**
* We don't need to do foreach or for loop here
* We can use an array map and map the post ids array
* with the values.
* So we will have an array of rates in the result
*/
$rates = array_map(
function( $id ) {
// we use using type transform using (int)
// assuming returning value will be a number or string number.
return (int) get_field( 'leasingfaktor', $id );
},
$post_ids
);
// Filter empty values and get unique values.
$rates = array_unique( array_filter( $rates ) );
// Check if the final array is not empty.
if ( ! empty( $rates ) ) {
$min_rate = min( $rates );
}
}
return $min_rate;
}
add_shortcode( 'LEASINGFAKTOR', 'leaserate_shortcode' );