$taxonomies = get_object_taxonomies( array( 'post_type' => $post_type ) );
foreach( $taxonomies as $taxonomy ) {
$terms = get_terms( $taxonomy );
foreach( $terms as $term ) {
$posts = get_posts( array(
'post_type' => $post_type,
'posts_per_page' => 1,
'fields' => 'ids',
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $term->slug,
)
),
'meta_query' => array(
array(
'key' => 'publish_in',
'value' => true,
),
),
) );
if ( is_array( $posts ) && count( $posts ) > 0 ) {
print_r( $term );
}
}
}
add_action( 'wp_head', 'category_publish_in_update' );
function category_publish_in_update() {
// выходим, если не категория
if ( !is_category() ) {
return;
}
// проверяем, что поле publish_in не обновлено
if ( !get_term_meta( get_queried_object()->term_id, 'publish_in', true ) ) {
// если находимся в категории, пытаемся получить хоть один пост с publish_in = true
$posts = get_posts( array(
'posts_per_page' => 1,
'cat' => get_queried_object()->term_id,
'fields' => 'ids',
'meta_query' => array(
array(
'key' => 'publish_in',
'value' => true,
),
),
) );
// если такой пост есть, записываем в мету категории publish_in = true
if ( is_array( $posts ) && count( $posts ) > 0 ) {
update_term_meta( get_queried_object()->term_id, 'publish_in', true );
}
// обновляем поле publish_in_update, чтобы не запускать функцию каждый раз
update_term_meta( get_queried_object()->term_id, 'publish_in_update', true );
}
}
// обновляем поле publish_in_update при публикации записи
add_action( 'save_post', 'custom_save_post', 25 );
function custom_save_post( $post_id ) {
// проверяем, что это post и у него есть хотя бы одна категория
if ( get_post_type( $post_id ) === 'post' && has_term( '', 'category', $post_id ) ) {
foreach( get_the_terms( $post_id, 'category' ) as $category ) {
update_term_meta( $category->term_id, 'publish_in_update', false );
}
}
}
$taxonomies = get_object_taxonomies( array( 'post_type' => $post_type ) );
$args = [
'taxonomy' => [ $taxonomies ],
'meta_query' => array(
array(
'key' => 'publish_in',
'value' => true,
),
),
];
if ( $terms = get_terms( $args ) ) {
foreach( $terms as $term ){
print_r( $term );
}
}
is_category()
нужно заменить на проверки вашей таксономии // переключаемся на ID основного сайта сети
switch_to_blog( get_main_site_id() );
// задаем нужные нам критерии выборки данных из БД
$args = array(
'posts_per_page' => 6,
'post_type' => 'post',
);
$query = new WP_Query( $args );
// Цикл
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<h3>' . get_the_title() . '</h3>';
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post.
wp_reset_postdata();
// возвращемся к текущему блогу
restore_current_blog();
wp_query()
с выводом заголовков выглядит так:// задаем нужные нам критерии выборки данных из БД
$args = array(
'posts_per_page' => 6,
'post_type' => 'post',
);
$query = new WP_Query( $args );
// Цикл
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<h3>' . get_the_title() . '</h3>';
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post.
wp_reset_postdata();
query_posts()
, это системная функция ядра, вы сломаете основной запрос. Чтобы его поправить используйте хук pre_get_posts
add_action( 'pre_get_posts', 'set_front_page_category' );
function set_front_page_category( $query ) {
if ( $query->is_front_page() && $query->is_main_query() ) {
$query->set( 'cat', '2' );
}
}
wp_query()
и get_terms()
, они нужны для запроса записей и терминов из базы для последующей обработки или выводаthe_title()
— вывести заголовокthe_post_thumbnail()
— вывести изображение записиthe_content()
— вывести контентget_field()
и the_field()
вторым параметром принимают id записиget_field($selector, [$post_id], [$format_value]);
the_field($selector, [$post_id], [$format_value]);
get_field( 'slogan_3img', 15 );
the_field( 'slogan_3img', 15 );
get_field( 'slogan_3img', 'options' );
the_field( 'slogan_3img', 'options' );
has_term()
if ( has_term( 'pochta', $taxonomy ) ) {
// code
}
ob_start()
и вернуть его с помощью ob_get_contents()
function slider_shortcode_func( $atts ) {
ob_start(); ?>
<div class="slider">
<div class="slider-init">
<h2>Slider Content</h2>
</div>
</div>
<?php ob_get_contents();
}
add_shortcode( 'slider', 'slider_shortcode_func' );
function slider_shortcode_func( $atts ) {
$html = '';
$html .= '<div class="slider">';
$html .= '<div class="slider-init">';
$html .= '<h2>Slider Content</h2>';
$html .= '</div>';
$html .= '</div>';
return $html;
}
add_shortcode( 'slider', 'slider_shortcode_func' );
the_field()
нужно переписать в get_field()
$slider_post->ID
, функция setup_postdata()
не нужнаgetSlider()
должна возвращаться массив записей для работы, без нее ничего работать не будет $tag = new WPCF7_FormTag( $tag );
if ( empty( $tag->name ) ) {
return '';
}
$args = [
'post_type' => 'programs',
'post_status' => 'publish',
'posts_per_page' => -1,
];
$html = '';
$options = array();
// пишем текущую запись в массив $options и исключаем из выборки get_posts()
if ( is_single() && get_post_type() === 'programs' ) {
$args['post__not_in'][] = get_the_ID(),
$options[] = get_the_title();
}
// берем посты из базы
if ( $posts = get_posts( $args ) ) {
foreach ( $posts as $key => $post ) {
$options[] = $post->post_title;
}
}
// собираем <select>
if ( !empty( $options ) ) {
$html .= '<select name="' . $tag->name . '" id="' . $tag->name . '-options">';
foreach ( $options as $key => $option ) {
$html .= '<option value="' . esc_html( $option ) . '">' . esc_html( $option ) . '</option>';
}
$html .= '</select>';
}
return $html;