$count = 1;
while ( have_posts() ) : the_post();
if ( $count === 1 ) {
echo '<div class="left-column">';
}
// Здесь вывод записи
if ( $count === 4 ) {
echo '</div>';
}
$count++;
endwhile;
<div class="left-column">
запись
запись
запись
запись
</div>
запись
запись
запись
...
/**
* For category archives, always show only the posts in queried category, not their children.
*
* @param \WP_Query $query
*/
function exclude_category_children( $query ) {
if ( $query->is_category() && $query->is_main_query() ) {
$query->set( 'tax_query', [
[
'taxonomy' => 'category',
'field' => 'slug',
'terms' => $query->query_vars['category_name'],
'include_children' => false
],
] );
}
}
add_action( 'pre_get_posts', 'exclude_category_children' );
function exclude_category_children( $query ) {
if ( $query->is_category() && $query->is_main_query() ) {
$category = get_category_by_slug( $query->query_vars['category_name'] );
$query->set( 'category__in', $category->term_id );
}
}
add_action( 'pre_get_posts', 'exclude_category_children' );
category__in
заставляет WP_Query возвращать по строгому совпадению, поэтому будет без дочерних. Но нужно сначала получить ID категории, поэтому будет один дополнительный запрос. При использовании хука pre_get_posts первый вариант лучше. При использовании произвольного вторичного цикла WP_Query второй метод будет лучше (передать сразу ID категории в параметры нового WP_Query). $my_var
(которая у вас строка) передать array( $my_var )
(то есть массив с этой строкой в виде элемента массива). Но в случаях, если требуется ассоциативный массив, это конечно не поможет. Впрочем, в этом случае надо смотреть в какой конкретно функции это происходит и читать ее сигнатуру, в доке будет описание переменной и подсказка что туда передавать. Это необходимо для генерации сертификата Lets encrypt для каждого поддомена в отдельности.
мне надо сделать страницу с блогом (блог не на главной)
и надо сделать цикл вывода записей
через backgrond-image нельзя же, потому что не вписать <?php the_post_thumbnail(); ?> в свойствах css, и position: absolute нельзя использовать
<div class="post-head" style="background: url( <?php the_post_thumbnail_url(); ?> );">
<h1><?php the_title(); ?></h1>
</div>
<?php
/*
* Example plugin.
*
* Plugin Name: Example plugin
* Description: Plugin description.
* Version: 0.1.0
* Author: Ihor Vorotnov
* Author URI: https://ihorvorotnov.com
* Text Domain: cm
* Domain Path: /languages
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
*/
// Exit if accessed directly
defined( 'ABSPATH' ) or die();
/**
* Define default configuration for tabs and return it.
*
* @param null $key
*
* @return array
*/
function cm_config( $key = null ) {
// Define configuration
$config = array(
'main' => array (
'title' => 'Основные',
'variables' => array (
'variable1' => 'color 1',
'variable2' => 'color 2',
),
),
'header' => array (
'title' => 'Хедер',
'variables' => array (
'variable1' => 'color 1',
'variable2' => 'color 2',
),
),
'header1' => array (
'title' => 'Хедер1',
'variables' => array (
'variable1' => 'color 1',
'variable2' => 'color 2',
),
),
);
// If specific element of the config is requested
if ( ! is_null( $key ) && array_key_exists( $key, $config ) ) {
return $config[ $key ];
}
// Otherwise return the whole config
return $config;
}
/**
* Helper function to determine currently active tab and make sure it exists.
*
* @return string
*/
function cm_active_tab() {
// If the tab slug is passed via GET and it actually exists
if ( isset( $_GET['tab'] ) && array_key_exists( $_GET['tab'], cm_config() ) ) {
return esc_attr( $_GET['tab'] );
}
// Otherwise, the 'main' tab is the default
return 'main';
}
/**
* Register options page.
*/
function cm_add_plugin_page() {
add_options_page(
'Color Manager',
'Color Manager',
'manage_options',
'cm_settings',
'cm_options_page_output'
);
}
add_action( 'admin_menu', 'cm_add_plugin_page' );
/**
* Render options page HTML.
*/
function cm_options_page_output() {
?>
<div class="wrap">
<h1>Color Manager</h1>
<h2 class="nav-tab-wrapper">
<?php do_action( 'cm_settings_tabs' ); ?>
</h2>
<?php do_action( 'cm_settings_content' ); ?>
</div>
<?php
}
/**
* Render tabs dynamically.
*/
function cm_render_tabs() {
// Get the plugin config without globals everywhere
$config = cm_config();
// Loop through the elements from config and build tab links
foreach ( $config as $slug => $element ) {
// Build URL for current element
$url = admin_url( 'options-general.php?page=cm_settings&tab=' ) . $slug;
// Set default css class(es)
$classes = 'nav-tab';
// Add css class to active tab
if ( cm_active_tab() == $slug ) {
$classes .= ' nav-tab-active';
}
// Render the tab link HTML
printf( '<a href="%s" class="%s">%s</a>',
$url,
$classes,
$element['title']
);
}
}
add_action( 'cm_settings_tabs', 'cm_render_tabs' );
/**
* Render tab content dynamically.
*/
function cm_render_tab_content() {
// Get currently active tab slug
$active_tab = cm_active_tab();
// Get data for this tab from the config
$data = cm_config( $active_tab );
var_dump( $data );
// Load corresponding template part or call the function to render requested content.
// --------------------------------------------------------------
// Your code here...
// --------------------------------------------------------------
}
add_action( 'cm_settings_content', 'cm_render_tab_content' );
// Параметры удобнее задавать отдельно
$args = array(
'post_type' => APP_POST_TYPE,
'ignore_sticky_posts' => true,
'meta_query' => array(
array(
'key' => 'cp_category',
'value' => 'Не определено',
'compare' => '=',
),
),
);
// Получаем массив постов.
$categories = get_posts( $args );
// Перебираем массив, обязательно as $post, чтобы корректно работала функция setup_postdata()
foreach( $categories as $post ) {
// Устанавливаем текущую запись в глобальный scope
setup_postdata( $post );
// Подключаем шаблон, который уже сможет видеть корректные данные из глобального scope
get_template_part( 'loop', 'ad_listing' );
}
// Очищаем глобальный scope
wp_reset_postdata();
if ( ! is_single() ) {
// код будет выполнен только если это одна запись и ее тип не страница или аттачмент
}
if ( ! is_singular( 'post' ) ) {
// код будет выполнен везде кроме single типа post
}