Intereting Posts
Закажите пользователей к дате их последнего сообщения Почему шаблон моей категории игнорирует тип сообщения? Ajax с OOP не работает Страница результатов с двумя аналогичными запросами Показать пользовательские позиции таксономии WordPress, основанные на выбранном элементе из другой пользовательской таксономии Ошибка плагина после установки Какой метод проверки подлинности WP-API следует использовать для взаимодействия с анонимными / незарегистрированными посетителями? Реализация веб-сайта для хостинга изображений с использованием WordPress? Glyphicons Dont Show в плагине WordPress Изменить заголовок на главной странице архива Настройте, как выглядит тема WordPress в разделе «Выбор темы» Как изменить цвет фона моего заголовка динамически на основе значения цвета пользовательских сообщений? переворачивать горизонтальные изображения навалом Получение CDN-url из общего кэша w3 По темам плагины?

Включение CPT и статического содержимого в каждый пост X, возможно ли это?

Я работаю над списком спецификаций для нового проекта, который имеет следующую функцию:

Отобразите все CPT из определенной категории на странице архива, затем вставьте объявление (CPT) в цикл после каждого четвертого CPT и вставьте блок контента после каждого 6-го CPT.

В основном этот макет, который повторяется до тех пор, пока не отобразятся все CPT из определенной категории:

XXX XAX CXX 

X = пользовательский тип сообщения A = объявление (другое CPT) C = статический контент

Возможно ли это с помощью WordPress, и если да, то каким должен быть лучший способ подойти к этой проблеме? Уже прочитал что-то о циклах внутри циклов и с помощью подсчета $, чтобы вставить содержимое в определенные числа, но я никогда не работал с этим раньше.

В зависимости от того, каким будет ваш статический контент и реклама, может возникнуть соблазн создать персонализированный тип сообщения, добавить объявление и статическое содержимое, а затем использовать класс @birgire post injector, чтобы позаботиться о введении этих двух сообщений, они вам нужны. Возможно, вам придется немного изменить класс инжектора, чтобы удовлетворить ваши конкретные потребности.

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

 class MultiInjector { /** * @var array $specialContent; * @access protected * @since 1.0.0 */ protected $specialContent; /** * @var array $specialContent; * @access protected * @since 1.0.0 */ protected $arrayValues; /** * @var array $pairs; * @access protected * @since 1.0.0 */ protected $pairs; /** * Constructor * * @param array $specialContent; = [] * @since 1.0.0 */ public function __construct( $specialContent = [] ) { $this->specialContent = $specialContent; } public function init() { add_action( 'the_post', [$this, 'thePost'] ); } /** * Protected method specialContentValidated() * * Make sure we have post positions, if not, set defauls. Also, reset * all array keys to numeric values * * @since 1.0.0 */ protected function specialContentValidated() { $arrayValues = false; if ( $this->specialContent && is_array( $this->specialContent ) ) { $arrayValues = array_values( $this->specialContent ); // Loop over the array of special content and set defaults if no custom values exist foreach ( $arrayValues as $key=>$value ) { $defaults = [ 'content' => 'This is default content, make sure to set your own', 'postPosition' => $key ]; $arrayValues[$key] = wp_parse_args( $value, $defaults ); } } $this->arrayValues = $arrayValues; } /** * Protected method positions() * * Save an array of $key/postPosition pairs * * @since 1.0.0 */ protected function positions() { $this->specialContentValidated(); $pairs = false; if ( $this->arrayValues ) { foreach ( $this->arrayValues as $key=>$value ) $pairs[$key] = $value['postPosition']; } $this->pairs = $pairs; } public function thePost() { // Make sure this is the main query, if not, bail if ( !in_the_loop() ) return; $this->positions(); // Make sure we have special content to add, if not bail if ( false === $this->arrayValues ) return; // Set a static post counter to count the amount of posts static $postCount = 0; // Search for the post position in the $this->pairs array $position = array_search( $postCount, $this->pairs ); if ( false !== $position ) { // Everything checks out, display our custom content echo $this->arrayValues[$position]['content']; } // Update the counter $postCount++; } } 

Затем вы можете использовать его, как следует

 add_action ( 'wp', function () { $args = [ 0 => [ 'content' => 'This is my content', 'postPosition' => 4 ], 1 => [ 'content' => 'This is my other content', 'postPosition' => 6 ] ]; $q = new MultiInjector( $args ); $q->init(); });