Условная опция даты для функции php - плагин wordpress (ACF) - PullRequest
0 голосов
/ 09 октября 2018

Это первый раз, когда я публикую что-то в Stack Overflow, и мои знания в области программирования php имеют дыры.Тем не менее, если бы кто-нибудь мог помочь мне решить нижеприведенную проблему, я был бы вечно благодарен.

Я создал список элементов, каждый из которых имеет 1) заголовок, 2) ссылку, 3) дату и 4) описание, которые вводятся через плагин ACF на сайте WordPress.Я включил код для отображения этого списка в начале веб-сайта ниже - обратите внимание, что есть ряд списков, означающих, что внутри основного (называемого родительским повторителем) есть вложенные списки (называемые вспомогательным повторителем).

Однако.,,Я хочу создать дополнительный список над вложенным списком, в котором есть все записи (введенные в подповторник), которые новее, чем 30 дней.Таким образом, создание 2 вложенных (подчиненных повторителей) списков внутри (родительского повторителя) списка.

Итак.,,Мне нужно создать условный оператор «если», который отделяет «детали списка элементов» не ранее, чем через 30 дней (например), и помещает их в список (под повторителя), за которым следует «еще», где все »детали списка элементов«старше 30 дней отображаются в отдельном списке (под повторителе).

Может кто-нибудь объяснить, как я могу сгенерировать это условие в приведенном ниже коде - к вашему сведению, этот код в настоящее время успешно работает и создает вложенный (под повторитель)списки внутри списков (родительского повторителя), но мне нужно разделить списки (вспомогательного повторителя) на 2 отдельных списка - один с элементами, которые были старше 30 дней, а другой с остальными элементами (которые будут старше 30 дней).

<?php 
    // check for rows (parent repeater)
    if( have_rows('membership_lists_links') ): ?>
        <?php 
        // loop through rows (parent repeater)
        while( have_rows('membership_lists_links') ): the_row(); ?>
           <div>
                <h2 class="acf-admin"><?php the_sub_field('item_list_title'); ?></h2>
                <?php 
                // check for rows (sub repeater)
                if( have_rows('item_list_details') ): ?>
                    <ul class="admin">
                    <?php
                    // loop through rows (sub repeater)
                    while( have_rows('item_list_details') ): the_row() 
                        // display each item as a list
                        ?>
                           <li><div class='itemTitle'>
                                    <?php $link = get_sub_field('link_url'); if( $link ): ?>
                                    <a href="<?php echo $link['url']; ?>" target="<?php echo $link['target']; ?>" title="<?php echo $link['title']; ?>">
                                    <?php endif; ?>
                                    <?php the_sub_field('link_name'); ?>
                                    <?php $link = get_sub_field('link_url'); if( $link ): ?>
                                    </a>
                                    <?php endif; ?>
                                </div>
                                <div class="memberListDate">
                                    <?php the_sub_field('date'); ?>
                                </div>
                                <br/>
                                <div class="itemDescription">
                                    <?php the_sub_field('link_description'); ?>
                                </div>
                            </li>   
                    <?php endwhile; ?>
                    </ul>
                <?php endif; //if( get_sub_field('section_details') ): ?>
            </div>
        <?php endwhile; // while( has_sub_field('business_sections') ): ?>

Я предполагаю, что часть кода, которая начинается.,,

<?php // check for rows (sub repeater)
if( have_rows('item_list_details') ): ?>

- это место, где должно выполняться условие возраста даты.Затем я могу создать список предметов, которые не старше 30 дней, а затем "else", который содержит список всех предметов старше 30 дней.

Надеюсь, я достаточно хорошо объяснил себя и был бы очень признателенлюбая помощь в достижении этого.Как я уже говорил ранее, в моих знаниях php есть дыры, но я надеюсь, что, взаимодействуя с сообществом Stack Overflow, я смогу узнать больше и, надеюсь, помочь другим в дальнейшем.

Спасибо

Фил

1 Ответ

0 голосов
/ 09 октября 2018

Значения повторителей хранятся в массивах, поэтому я собираюсь использовать цикл foreach на повторителях вместо использования функций ACF have_rows() и the_row() - я думаю, что будет немного легче понять этот способ.

Кроме того, этот ответ будет зависеть от того, как вы настроили поле Дата.Если вы используете встроенное поле выбора даты, выберите Ymd в качестве формата возврата в настройках поля.Если вы извлекаете текущую дату в том же формате, вы можете сравнить эти значения:

<?php 
$membershipListLinks = get_field('membership_lists_links');

$lastMonth = date('Ymd', strtotime('-30 days'));

// check for rows (parent repeater)    
if( $membershipListLinks ): ?>
    <?php 
    // loop through rows (parent repeater)
    foreach( $membershipListLinks as $membershipListLink ): 
        $title = $membershipListLink['item_list_title'];
        $details = $membershipListLink['item_list_details'];
        ?>
        <div>
            <h2 class="acf-admin"><?php echo $title; ?></h2>
            <?php 
            // check for rows (sub repeater)
            if( $details ): 
                // create some arrays
                $older = array();
                $newer = array();
                foreach( $details as $detail ): 
                    $date = $detail['date']; // make sure to return in Ymd format
                    // add the items to one of the empty arrays
                    if( $date < $lastMonth ) {
                        $older[] = $detail;
                    } else {
                        $newer[] = $detail;
                    }
                    $arrays = array($older, $newer);
                    foreach( $arrays as $array ):
                        if( !empty($array) ):
                        ?>
                        <ul>
                            <?php
                            foreach( $array as $detail ):
                                $link = $detail['link_url'];
                                $name = $detail['link_name'];
                                $date = $detail['date'];
                                $description = $detail['link_description'];
                                // display each item as a list
                                ?>
                                <li>
                                    <div class="itemTitle">
                                        <?php if( $link ): ?>
                                        <a href="<?php echo $link['url']; ?>" target="<?php echo $link['target']; ?>" title="<?php echo $link['title']; ?>">
                                        <?php endif; ?>
                                        <?php echo $name; ?>
                                        <?php if( $link ): ?>
                                        </a>
                                        <?php endif; ?>
                                    </div>
                                    <div class="memberListDate">
                                        <?php echo $date; ?>
                                    </div>
                                    <br/>
                                    <div class="itemDescription">
                                        <?php echo $description; ?>
                                    </div>
                                </li>   
                            <?php endforeach; ?>
                        </ul>
                        <?php endif; ?>
                    <?php endforeach; ?>
                <?php endforeach; ?>
            <?php endif; ?>
        </div>
    <?php endforeach; ?>
<?php endif; ?>

РЕДАКТИРОВАТЬ:

<?php 
$membershipListLinks = get_field('membership_lists_links');

$lastMonth = date('Ymd', strtotime('-30 days'));

// check for rows (parent repeater)    
if( $membershipListLinks ): ?>
    <?php 
    // loop through rows (parent repeater)
    foreach( $membershipListLinks as $membershipListLink ): 
        $title = $membershipListLink['item_list_title'];
        $details = $membershipListLink['item_list_details'];
        ?>
        <div>
            <h2 class="acf-admin"><?php echo $title; ?></h2>
            <?php 
            // check for rows (sub repeater)
            if( $details ): 
                // create some arrays
                $older = array();
                $newer = array();
                foreach( $details as $detail ) { 
                    $date = $detail['date']; // make sure to return in Ymd format
                    // add the items to one of the empty arrays
                    if( $date < $lastMonth ) {
                        $older[] = $detail;
                    } else {
                        $newer[] = $detail;
                    }
                }    
                $arrays = array('older' => $older, 'newer' => $newer);
                foreach( $arrays as $key => $value ):
                    if( !empty($value) ):
                    ?>
                    <ul class="<?php echo ($key == 'older') ? 'older' : 'newer'; // change as needed ?>">
                        <?php
                        foreach( $value as $detail ):
                            $link = $detail['link_url'];
                            $name = $detail['link_name'];
                            $date = $detail['date'];
                            $description = $detail['link_description'];
                            // display each item as a list
                            ?>
                            <li>
                                <div class="itemTitle">
                                    <?php if( $link ): ?>
                                    <a href="<?php echo $link['url']; ?>" target="<?php echo $link['target']; ?>" title="<?php echo $link['title']; ?>">
                                    <?php endif; ?>
                                    <?php echo $name; ?>
                                    <?php if( $link ): ?>
                                    </a>
                                    <?php endif; ?>
                                </div>
                                <div class="memberListDate">
                                    <?php echo $date; ?>
                                </div>
                                <br/>
                                <div class="itemDescription">
                                    <?php echo $description; ?>
                                </div>
                            </li>   
                        <?php endforeach; ?>
                    </ul>
                    <?php endif; ?>
                <?php endforeach; ?>
            <?php endif; ?>
        </div>
    <?php endforeach; ?>
<?php endif; ?>
...