Last active
September 13, 2022 01:23
-
-
Save campusboy87/9a45e65bcd28d8521ca2a2552553e6aa to your computer and use it in GitHub Desktop.
Функция для получения значения repeat acf поля с учётом пагинации.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Получает значения repeat acf поля с учётом пагинации. | |
* | |
* todo: | |
* 1) Кеширование | |
* 2) Соответствие имен вложенных полей с настройками repeat поля. | |
* 3) Учитывать вложенные repeat/группы поля. | |
* | |
* @param int $post_id ID записи. | |
* @param string $key Ключ поля, например my_field. | |
* @param int $rows Сколько элементов надо получить. | |
* @param int $paged Страница пагинации. | |
* | |
* @return array | |
*/ | |
function get_repeat_field_by_pagination( $post_id, $key, $rows = 5, $paged = 1 ) { | |
global $wpdb; | |
$start = $rows * $paged - $rows; | |
$end = $rows * $paged - 1; | |
$beetween = implode( '|', range( $start, $end ) ); | |
$regexp = "'^$key\_($beetween)\_'"; | |
$result = $wpdb->get_results( " | |
SELECT meta_key as name, meta_value as val | |
FROM $wpdb->postmeta | |
WHERE post_id=$post_id AND wp_postmeta.meta_key REGEXP $regexp | |
" ); | |
$groups = []; | |
foreach ( $result as $row ) { | |
preg_match_all( $regexp, $row->name, $matches ); | |
$base_key = $matches[0][0]; | |
$sub_key = explode( $base_key, $row->name )[1]; | |
if ( isset( $groups[ $base_key ] ) ) { | |
$groups[ $base_key ][ $sub_key ] = $row->val; | |
} else { | |
$groups[ $base_key ] = [ $sub_key => $row->val ]; | |
} | |
} | |
return array_values( $groups ); | |
} | |
// Пример вызова | |
get_repeat_field_by_pagination( 357, 'repeat_field', 2, 6 ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Поле на странице редактирования группы полей
Поле на странице редактирования записи
Пример хранения данных такого поля в базе данных
Пример полученных данных при get_repeat_field_by_pagination( 357, 'repeat_field', 2, 6 )