Вопрос: Как лучше вставлять рекламу между постами в цикле?

Я работаю над своим первым проектом WP.

У меня есть тема, которая разбивает все посты на главной странице - и я Мне нужно добавлять повторяющуюся рекламу каждые 5-6 сообщений.

Я думал о том, чтобы изменить запрос к базе данных, в котором перечислены сообщения, и добавлять рекламу каждые столько раз.

Может кто-то указать мне, где найти запрос к базе данных?

Или есть более изящное решение, которое вы могли бы предложить?

спасибо.

Ответы и комментарии:

Вы можете попытаться добавить действие в хук 'the_post'; затем используйте условное выражение, основанное на счетчике $ wp_query-> current_post, чтобы показать объявление ... детали зависят от того, какую тему вы используете.
Создан 06-04-2018 05:45 Michael

@ Майкл: да, такой подход может сделать тему инъекций независимой, конечно.
Создан 06-04-2018 05:19 Andy Macaulay-Brook

@ AndyMacaulay-Brook - не полностью зависит от темы, так как в этом случае система сетки, возможно, основана на селекторах CSS; поэтому, чтобы разместить рекламу в сетке, они должны быть заключены в одну и ту же структуру HTML / CSS. по крайней мере, вам не нужно будет указывать точный файл темы для редактирования цикла домашней страницы.
Создан 06-04-2018 08:48 Michael

@ Михаил, я думаю, что он имел в виду зависимость, но да, the_post () может быть в некоторых нелогичных местах. Нет правила, что это должно быть сразу после have_posts (). Элемент упаковки сообщения может быть уже открыт.
Создан 07-04-2018 01:36 Jacob Peattie

спасибо - да, это то, что я думал - но не могли бы вы сказать мне, какой файл содержит этот вызов? Я совсем не знаком с файловой структурой WP.
Создан 06-04-2018 05:58 Stuart Hall

просмотрите каталог вашей темы. Конкретный файл зависит от того, где вы его хотите: дома, архивы, категории и т. д. и т. д. checkout developer.wordpress.org/themes/basics/template-hierarchy
Создан 06-04-2018 05:08 David Sword

Возможно, просто добавьте счетчик, покажите рекламу, кратную 6.
Что-то вроде
$ count = 0;
$ adEvery = 6;

if (have_posts ()):
    while (have_posts ()): the_post ();

        // Индивидуальная почта

        $ Подсчитывать ++;
        if ($ count% $ adEvery == 0) {
            // ваше объявление
        }
    ENDWHILE;
еще:
    // Сообщений не найдено
ENDIF;
Создан 06-04-2018 05:47

Фил Курт написал информативную статью по обработке сплит цикла WordPress с использованием свойства current_post в глобальном объекте $ wp_query.
Это может быть применено к вашему вопросу и позволяет нам аккуратно вставлять контент в любой точке цикла.
Функция выглядит следующим образом (поместите в functions.php или, как я предпочитаю, поместите в отдельный файл библиотеки, который обрабатывает только моды запросов):
/ **
 * Возвращает индекс текущей итерации цикла.
 *
 * @return int
 * /
function pdk_get_current_loop_index () {
    global $ wp_query;
    return $ wp_query-> current_post + 1;
}

Затем при выводе цикла, если мы хотим добавить объявление после 6-го поста:
if (have_posts ()):
    в то время как (
        have_posts ()):
        the_post ();

        get_template_part ('content');

        if (pdk_get_current_loop_index () === 6) {
        ?>
            

                
             DIV>
        <? PHP
        }

    ENDWHILE;
ENDIF;

Если вы читаете статью Фила, с этой функцией можно сделать и многое другое.
Создан 17-04-2018 09:04