Вывод режима работы на WordPress + Advanced Custom Fields Pro

В своей работе я часто делаю различные каталоги организаций, а они, как правило, работают с каким-либо графиком и почти всегда он не один на всех. Конечно, можно для этого использовать обычное текстовое поле и в нем прописать информацию, но подход это не структурный, обязательно будут различия в написании (человеческий фактор), да и поиск по ним нормальный не сделаешь.

Если вы столкнулись с этой задачей, с радостью поделюсь ниже своей наработкой, которая позволяет быстро добавить к себе на сайт это поле и вывести информацию в шаблоне. Объяснение как в этой статье, так и в коде – прилагается. Код предназначен для Pro-версии плагина Advanced Custom Fields (тут уж без него никак).

Файл импорта

Достаточно импортировать данную группу полей, и она будет добавлена на ваш сайт. Чтобы это сделать необходимо перейти в раздел Группы полей Инструменты Импорт группы полей.

Не забудьте разархивировать архив перед импортом.

Важный момент

После импорта у вас появится новая группа полей Режим работы:

Группа полей “Режим работы” с помощью Advanced Custom Fields

Если нужно, измените названия полей на ваше усмотрение. Структуру, id полей менять крайне не рекомендую, если вы достоверно не знаете, что делаете (может поломаться дальнейший код).

Подключению к нужному типу записей

Чтобы добавить данную группу полей к требуемому типу записей необходимо зайти в раздел Группы Полей → Режим работы и там настроить соответствующее отображение в разделе Условия отображения:

Подключение режима работы к типу записей “Клиники”

Создание функции

Открываем файл functions.php и добавляем туда следующий код (он немного староват, писался давно, переписать бы и сделать более оптимизированным… но работает, так что делюсь “как есть”):

/* Выводим режим работы организации */

    /* функция, которая превращает 1 цифру в 2 */

    function format2($number) {
        if ($number > 9) {
            $number = $number;
        } elseif ($number < 10) {
            $number = "0" . $number;
        }
        return $number;
    }

    /* основная функция для вывода режима работы организации */

    function org_hours() {
        /* Круглосуточный режим работы */
        if (get_field('hours') && get_field('hours') == "all24") {
            echo 'Ежедневно, круглосуточно';
        }
        /* Все остальные варианты */ else {
            /* Каждый день одинаково */
            if (get_field('hours_individual') && get_field('hours_individual') == "everydaysame") {

                /* Устанавливаем время на каждый день */
                $hours_everyday = '';
                if (have_rows('hours_everyday')):
                    while (have_rows('hours_everyday')): the_row();
                        $hours_start = get_sub_field('hours_start');
                        $hours_stop = get_sub_field('hours_stop');
                        if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                            $hours_everyday .= 'Ежедневно, с ' . $hours_start . ' до ' . $hours_stop;
                        } elseif ($hours_start > $hours_stop) {
                            $hours_everyday = 'Время работы указано не верно';
                        } else {
                            /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                            $hours_everyday = "Время работы не указано";
                        };
                    endwhile;
                endif;
                echo '' . $hours_everyday . '';
            }
            /* Отдельно будни и выходные */ elseif (get_field('hours_individual') && get_field('hours_individual') == "weekends") {

                /* Будни */

                /* Если в будни не работает */
                if (get_field('hours_if_budni') && get_field('hours_if_budni') == "budninotwork") {
                    $hours_budni = "Пн-Пт — выходной";
                    echo '' . $hours_budni . '';
                }
                /* Если в будни работает круглосуточно */ elseif (get_field('hours_if_budni') && get_field('hours_if_budni') == "budni24") {
                    $hours_budni = "Пн-Пт — круглосуточно";
                    echo '' . $hours_budni . '';
                }
                /* Если указано время работы в будни */ elseif (get_field('hours_if_budni') && get_field('hours_if_budni') == "budniset") {
                    $hours_budni = '';
                    if (have_rows('hours_budni')):
                        while (have_rows('hours_budni')): the_row();
                            $hours_start = get_sub_field('hours_start');
                            $hours_stop = get_sub_field('hours_stop');
                            if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                $hours_budni .= 'Пн-Пт — с ' . $hours_start . ' до ' . $hours_stop;
                            } elseif ($hours_start > $hours_stop) {
                                $hours_budni = 'Время работы в будни указано не верно';
                            } else {
                                /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                $hours_budni = "Время работы в будни не указано";
                            };

                        endwhile;
                    endif;
                    echo '' . $hours_budni . '';
                };
                if (get_field('hours_if_weekend') && get_field('hours_if_weekend') == "weekendnotwork") {
                    $hours_weekend = "Сб-Вс — выходной";
                    echo '' . $hours_weekend . '';
                } elseif (get_field('hours_if_weekend') && get_field('hours_if_weekend') == "weekend24") {
                    $hours_weekend = "Сб-Вс — круглосуточно";
                    echo '' . $hours_weekend . '';
                } elseif (get_field('hours_if_weekend') && get_field('hours_if_weekend') == "weekendset") {
                    $hours_weekend = '';
                    if (have_rows('hours_weekend')):
                        while (have_rows('hours_weekend')): the_row();

                            $hours_start = get_sub_field('hours_start');
                            $hours_stop = get_sub_field('hours_stop');
                            if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                $hours_weekend .= 'Сб-Вс — с ' . $hours_start . ' до ' . $hours_stop;
                            } elseif ($hours_start > $hours_stop) {
                                $hours_weekend = 'Время работы в выходные указано не верно';
                            } else {
                                /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                $hours_weekend = "Время работы в выходные не указано";
                            };

                        endwhile;
                    endif;
                    echo '' . $hours_weekend . '';
                };
            }
            /* Отдельно будни, суббота и воскресенье */ elseif (get_field('hours_individual') && get_field('hours_individual') == "weekends2") {

                /* Будни */

                /* Если в будни не работает */
                if (get_field('hours_if_budni') && get_field('hours_if_budni') == "budninotwork") {
                    $hours_budni = "Пн-Пт — выходной";
                    echo '' . $hours_budni . '';
                }
                /* Если в будни работает круглосуточно */ elseif (get_field('hours_if_budni') && get_field('hours_if_budni') == "budni24") {
                    $hours_budni = "Пн-Пт — круглосуточно";
                    echo '' . $hours_budni . '';
                }
                /* Если указано время работы в будни */ elseif (get_field('hours_if_budni') && get_field('hours_if_budni') == "budniset") {
                    $hours_budni = '';
                    if (have_rows('hours_budni')):
                        while (have_rows('hours_budni')): the_row();
                            $hours_start = get_sub_field('hours_start');
                            $hours_stop = get_sub_field('hours_stop');
                            if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                $hours_budni .= 'Пн-Пт — с ' . $hours_start . ' до ' . $hours_stop;
                            } elseif ($hours_start > $hours_stop) {
                                $hours_budni = 'Время работы в будни указано не верно';
                            } else {
                                /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                $hours_budni = "Время работы в будни не указано";
                            };

                        endwhile;
                    endif;
                    echo '' . $hours_budni . '';
                };

                /* Суббота */

                /* Если в субботу не работает */
                if (get_field('hours_if_sat') && get_field('hours_if_sat') == "satnotwork") {
                    $hours_sat_2 = "Сб — выходной";
                    echo '' . $hours_sat_2 . '';
                }
                /* Если в субботу работает круглосуточно */ elseif (get_field('hours_if_sat') && get_field('hours_if_sat') == "sat24") {
                    $hours_sat_2 = "Сб — круглосуточно";
                    echo '' . $hours_sat_2 . '';
                }
                /* Если указано время работы в субботу */ elseif (get_field('hours_if_sat') && get_field('hours_if_sat') == "satset") {
                    $hours_sat = '';
                    if (have_rows('hours_sat')):
                        while (have_rows('hours_sat')): the_row();
                            $hours_start = get_sub_field('hours_start');
                            $hours_stop = get_sub_field('hours_stop');
                            if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                $hours_sat .= 'Сб — с ' . $hours_start . ' до ' . $hours_stop;
                            } elseif ($hours_start > $hours_stop) {
                                $hours_sat = 'Сб — указано не верно';
                            } else {
                                /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                $hours_sat = "Сб — не указано";
                            };

                        endwhile;
                    endif;
                    echo '' . $hours_sat . '';
                };

                /* Воскресенье */

                /* Если в воскресенье не работает */
                if (get_field('hours_if_sun') && get_field('hours_if_sun') == "sunnotwork") {
                    $hours_sun = "Вс — выходной";
                    echo '' . $hours_sun . '';
                }
                /* Если в воскресенье работает круглосуточно */ elseif (get_field('hours_if_sun') && get_field('hours_if_sun') == "sun24") {
                    $hours_sun = "Вс — круглосуточно";
                    echo '' . $hours_sun . '';
                }
                /* Если указано время работы в воскресенье */ elseif (get_field('hours_if_sun') && get_field('hours_if_sun') == "sunset") {
                    $hours_sun = '';
                    if (have_rows('hours_sun')):
                        while (have_rows('hours_sun')): the_row();
                            $hours_start = get_sub_field('hours_start');
                            $hours_stop = get_sub_field('hours_stop');
                            if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                $hours_sun .= 'Вс — с ' . $hours_start . ' до ' . $hours_stop;
                            } elseif ($hours_start > $hours_stop) {
                                $hours_sun = 'Вс — указано не верно';
                            } else {
                                /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                $hours_sun = "Вс — не указано";
                            };
                        endwhile;
                    endif;
                    echo '' . $hours_sun . '';
                };
            }
            /* Если каждый день по-разному */ elseif (get_field('hours_individual') && get_field('hours_individual') == "weekends3") {
                /* Выводим режим работы в соответствии с рабочими днями */

                /* Время работы в понедельник */
                $hours_working_days = get_field('hours_working_days');
                if ($hours_working_days) {

                    /* Если понедельник - рабочий день */
                    if (in_array('mon', $hours_working_days)) {

                        /* Указываем время работы в понедельник */
                        $hours_mon = '';
                        if (have_rows('hours_mon')):
                            while (have_rows('hours_mon')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_mon .= 'Пн — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_mon = 'Пн — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_mon = "Пн — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_mon . '';
                    }
                    /* Если понедельник - выходной */ else {
                        echo 'Пн — выходной';
                    }

                    /* Если вторник - рабочий день */
                    if (in_array('tue', get_field('hours_working_days'))) {

                        /* Указываем время работы во вторник */
                        $hours_tue = '';
                        if (have_rows('hours_tue')):
                            while (have_rows('hours_tue')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_tue .= 'Вт — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_tue = 'Вт — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_tue = "Вт — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_tue . '';
                    }
                    /* Если вторник - выходной */ else {
                        echo 'Вт — выходной';
                    }

                    /* Если среда - рабочий день */
                    if (in_array('wen', get_field('hours_working_days'))) {

                        /* Указываем время работы в среду */
                        $hours_wen = '';
                        if (have_rows('hours_wen')):
                            while (have_rows('hours_wen')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_wen .= 'Ср — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_wen = 'Ср — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_wen = "Ср — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_wen . '';
                    }
                    /* Если среда - выходной */ else {
                        echo 'Ср — выходной';
                    }

                    /* Если четверг - рабочий день */
                    if (in_array('thu', get_field('hours_working_days'))) {

                        /* Указываем время работы в четверг */
                        $hours_thu = '';
                        if (have_rows('hours_thu')):
                            while (have_rows('hours_thu')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_thu .= 'Чт — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_thu = 'Чт — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_thu = "Чт — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_thu . '';
                    }
                    /* Если четверг - выходной */ else {
                        echo 'Чт — выходной';
                    }

                    /* Если пятница - рабочий день */
                    if (in_array('fri', get_field('hours_working_days'))) {

                        /* Указываем время работы в пятницу */
                        $hours_fri = '';
                        if (have_rows('hours_fri')):
                            while (have_rows('hours_fri')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_fri .= 'Пт — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_fri = 'Пт — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_fri = "Пт — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_fri . '';
                    }
                    /* Если пятница - выходной */ else {
                        echo 'Пт — выходной';
                    }

                    /* Если суббота - рабочий день */
                    if (in_array('sat', get_field('hours_working_days'))) {

                        /* Указываем время работы в субботу */
                        $hours_sat = '';
                        if (have_rows('hours_sat')):
                            while (have_rows('hours_sat')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_sat .= 'Сб — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_sat = 'Сб — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_sat = "Сб — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_sat . '';
                    }
                    /* Если суббота - выходной */ else {
                        echo 'Сб — выходной';
                    }

                    /* Если воскресенье - рабочий день */
                    if (in_array('sun', get_field('hours_working_days'))) {

                        /* Указываем время работы в воскресенье */
                        $hours_sun = '';
                        if (have_rows('hours_sun')):
                            while (have_rows('hours_sun')): the_row();
                                $hours_start = get_sub_field('hours_start');
                                $hours_stop = get_sub_field('hours_stop');
                                if ($hours_start != '' && $hours_stop != '' && $hours_start < $hours_stop) {
                                    $hours_sun .= 'Вс — с ' . $hours_start . ' до ' . $hours_stop;
                                } elseif ($hours_start > $hours_stop) {
                                    $hours_sun = 'Вс — указано не верно';
                                } else {
                                    /* Если кто-то забыл указать часы и минуты начала и/или окончания рабочего дня */
                                    $hours_sun = "Вс — не указано";
                                };
                            endwhile;
                        endif;
                        echo '' . $hours_sun . '';
                    }
                    /* Если воскресенье - выходной */ else {
                        echo 'Вс — выходной';
                    }
                } else {
                    echo 'Время работы не указано';
                }
            }
        }
    };

Теперь с помощью данной функции можно выводить режим работы в любом месте шаблона:

org_hours();

Небольшая стилизация

В принципе, как это оформить, дело уже ваше, но как минимум чтобы элементы в блоке не слипались друг с другом, можете добавить небольшой код в файл styles.css:

.org_hours span {
	margin-right: 15px;
}

Пример внедрения

Отображение в панели администратора

Пример отображения блока “Режим работы” в панели администратора

Отображение на сайте

Пример отображения блока “Режим работы” на сайте

В заключение

Это, в целом, все, что касается моего варианта добавления поля “Режим работы” в WordPress. Если у вас есть вопросы или возникли какие-либо трудности с внедрением, не стесняйтесь обратиться ко мне в комментариях.

Article Author

Artem Saveliev
Over 14 years experience in developing projects on Wordpress

Comments (0)

avatar
  Subscribe  
Notify of
Other Posts
Related to Web Development, Wordpress, SEO