json_encode()
и вставить в тег <script>
в html$data = [
'@context' => '//schema.org',
'@type' => 'Product',
'name' => 'Dorothy Perkins Свитер',
'image' => [
'//shop.com/photos/1x1/photo.jpg',
'//shop.com/photos/4x3/photo.jpg',
],
'description' => 'Теплый свитер синего цвета из 100% мериносовой шерсти.',
'sku' => '0446310786',
'brand' => [
'@type' => 'Thing',
'name' => 'Dorothy Perkins',
],
'aggregateRating' => [
'@type' => 'AggregateRating',
'ratingValue' => '4.4',
'reviewCount' => '89',
],
'offers' => [
'@type' => 'Offer',
'url' => '//shop.com/dp-sviter',
'priceCurrency' => 'RUB',
'price' => '2500',
'priceValidUntil' => '2020-11-05',
'itemCondition' => '//schema.org/NewCondition',
'availability' => '//schema.org/InStock',
'seller' => [
'@type' => 'Organization',
'name' => 'Интернет-магазин Shop.co',
],
],
];
$data = json_encode( $data );
echo '<script type="application/ld+json">' . $data . '</script>';
$crb_options = array(
'post_meta' => __( 'Article Properties', 'textdomain' ),
'term_meta' => __( 'Category Properties', 'textdomain' ),
);
foreach ( $crb_options as $key => $crb_option ) {
Container::make( $key, $crb_option )
->add_tab( 'SEO', array(
Field::make( 'text', 'crb_seo_title', __( 'Title', 'textdomain' ) ),
Field::make( 'textarea', 'crb_seo_description', __( 'Description', 'textdomain' ) ),
Field::make( 'text', 'crb_seo_keywords', __( 'Keywords', 'textdomain' ) ),
Field::make( 'radio', 'crb_seo_robots', __( 'Robots Visibility', 'textdomain' ) )
->add_options( array(
'index, follow' => 'index, follow',
'noindex, nofollow' => 'noindex, nofollow',
) )
) );
}
load_theme_textdomain()
wp_robots
geoip_detect2_get_info_from_current_ip()
, разобрать полученный результат и сделать редирект на подходящую языковую версию register_post_type()
, а сами переводы лежат в .po и .mo файлах wp_add_inline_script()
, которая добавляет JS прямо в html документ, после указанного скрипта. Например, инициализация masonry может выглядеть так:wp_enqueue_script( 'masonry' );
$masonry_init = 'jQuery(function($) {
var $container = $(".masonry-gallery");
$container.imagesLoaded( function() {
$container.masonry({
columnWidth: ".masonry-item",
itemSelector: ".masonry-item"
});
});
});';
wp_add_inline_script( 'masonry', $masonry_init );
save_post
мы можно добавлять свежие термины записи в начало массива с помощью array_unshift()
add_action( 'save_post', 'update_fresh_terms' );
if ( ! function_exists( 'update_fresh_terms' ) ) {
function update_fresh_terms( $post_id ) {
if ( $_POST['post_type'] === 'post' ) {
$fresh_terms = get_option( '_fresh_category', array() );
// Получаем термины текущего поста.
$terms = get_the_terms( $post_id, 'category' );
if ( is_array( $terms ) ) {
foreach ( $terms as $key => $term ) {
array_unshift( $fresh_terms, $term->term_id ); // Добавляем id новых терминов в начало массива.
}
}
$fresh_terms = array_unique( $fresh_terms );
update_option( '_fresh_category', $fresh_terms );
}
}
}
get_option()
. Или же можно создать дополнительную функцию, которая при первом использовании, когда массив с терминами еще пустой, будет делать запрос всех постов из базы и собирать массив терминов по «свежести»if ( ! function_exists( 'get_fresh_terms' ) ) {
function get_fresh_terms( $count = 5, $post_type = 'post', $term_name = 'category' ) {
$fresh_terms = get_option( '_fresh_' . $term_name, array() );
if ( empty( $fresh_terms ) ) {
// Задаем нужные нам критерии выборки данных из БД.
$args = array(
'posts_per_page' => -1,
'post_type' => $post_type,
);
$posts = get_posts( $args );
foreach ( $posts as $key => $post ) {
// Получаем термины текущего поста.
$terms = get_the_terms( $post->ID, $term_name );
if ( is_array( $terms ) ) {
foreach ( $terms as $key => $term ) {
$fresh_terms[] = $term->term_id;
}
}
}
$fresh_terms = array_unique( $fresh_terms );
}
// Если запрос не дал ни одной категории, возвращаем false.
if ( empty( $fresh_terms ) ) {
return false;
} else {
update_option( '_fresh_' . $term_name, $fresh_terms );
}
return $fresh_terms;
}
}
// Задаем нужные нам критерии выборки данных из БД.
$args = array(
'posts_per_page' => -1,
'post_type' => 'page',
);
$pages = get_posts( $args );
$outer = array();
$parents = array();
// Собираем списки страниц в отдельный массив.
foreach ( $pages as $key => $page ) {
$outer[ $page->post_parent ][ $page->ID ]['title'] = $page->post_title;
$outer[ $page->post_parent ][ $page->ID ]['link'] = get_permalink( $page->ID );
$parents[] = $page->post_parent;
}
echo '<div class="row">';
// Основной цикл.
foreach ( $outer as $key => $inner ) {
echo '<div class="article-column col-12 col-sm-6 col-lg-4 col-xl-3">';
// Верхний заголовок без ссылки.
if ( $key === 0 ) {
echo '<h3>Остальные страницы</h3>';
} else {
echo '<h3>' . $outer[0][ $key ]['title'] . '</h3>';
}
echo '<ul class="article-list">';
foreach ( $inner as $key => $value ) {
if ( ! in_array( $key, $parents, true ) ) {
echo '<li class="article-list--item">';
echo '<a class="article-list--link" href="' . $value['link'] . '">' . $value['title'] . '</a>';
echo '</li>';
}
}
echo '</ul>';
echo '</div>';
}
echo '</div>';
do_action()
— это не файл, это хук, на который можно подключить php-функцию с помощью add_action()
. Потенциально подключаемая функция может находиться в любом файле проекта, воспользуйтесь поиском по файлам, чтобы не гадатьget_queried_object()
$categories = get_categories( array( 'taxonomy' => 'work-products', 'hide_empty' => false ) );
foreach ( $categories as $key => $cat ) {
if ( get_queried_object_id() === $cat->term_id ) {
echo '<a class="active" href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
} else {
echo '<a href="' . get_category_link( $cat->term_id ) . '">' . $cat->name . '</a>';
}
}
Максимально поверхностно касался и одного и другого
wp_get_recent_posts()
для получения последних записей сайта. По умолчанию функция получает 10 последних записей включая черновики, запланированные и записи на модерации, это можно изменить с помощью дополнительных аргументовfunction wpb_exclude_from_main_query( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
$args = array(
'numberposts' => 1,
'post_type' => 'post',
'post_status' => 'publish',
);
$recent_posts = wp_get_recent_posts( $args );
if ( is_array( $recent_posts ) && ! empty( $recent_posts ) ) {
$exclude_ids = array();
foreach ( $recent_posts as $key => $recent_post ) {
$exclude_ids[] = $recent_post['ID'];
}
$query->set( 'post__not_in', $exclude_ids );
}
}
}
add_action( 'pre_get_posts', 'wpb_exclude_from_main_query' );
tax_query
is_home()
. Этот условный тег проверяет показывается ли страница с последними постами, зависит от настроек параметров Чтение → Показывать последние записи сайта