pre_get_posts
add_action( 'pre_get_posts', 'pre_search_filter' );
function pre_search_filter( $query ){
if ( !is_admin() && $query->is_main_query() && $query->is_search ) {
$query->set( 'orderby', 'type' );
}
}
$term_id = 6;
if ( $terms = get_subterms_by_parent_id( $term_id ) ) {
array_push( $terms, $term_id );
} else {
$terms[] = $term_id;
}
if ( is_category( $terms ) ) {
// код...
}
function get_subterms_by_parent_id( $id, $taxonomy = 'category' ) {
$terms = get_terms( array(
'taxonomy' => $taxonomy,
'fields' => 'ids',
'hide_empty' => true,
'parent' => $id // or
//'child_of' => $id // to target not only direct children
) );
if ( !is_array( $terms ) ) {
return false;
}
return $terms;
}
woocommerce_widget_shopping_cart_buttons
— хук, который выводит кнопкиquery_vars
add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $qvars ) {
$qvars[] = 'tab';
return $qvars;
}
$url = add_query_arg( [ 'tab' => '2' ], home_url( '/' ) ); // Получится ссылка вида https://example.loc/?tab=2
get_query_var()
, при выводе проверяете его номер и присваиваете соответствующий класс$active_tab = get_query_var( 'tab', 1 );
$tabs = ['О компании', 'Услуги', 'Портфолио'];
foreach ( $tabs as $key => $tab ) {
if ( $key == $active_tab ) {
echo '<div class="tab active">';
} else {
echo '<div class="tab">';
}
}
login_redirect
add_filter( 'login_redirect', 'login_redirect', 10, 3 );
function login_redirect( $redirect_to, $request, $user ) {
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
return get_edit_user_link( $user->ID );
}
return $redirect_to;
}
woocommerce_login_redirect
, можете попробовать использовать егоadd_filter( 'woocommerce_login_redirect', 'filter_function_name_7289', 10, 2 );
function filter_function_name_7289( $remove_query_arg, $user ){
// filter...
return $remove_query_arg;
}
var_dump( get_option( 'rewrite_rules', false ) );
var_dump( get_option( 'widget_categories', false ) );
var_dump( get_option( 'wp_user_roles', false ) );
var_dump( get_option( 'cron', false ) );
var_dump( get_post_meta( get_the_ID(), '_schema_json', true ) );
while ( have_posts() )
— это цикл перебора постов из глобального запросаthe_post()
— функция устанавливает переменную $post для работы функций the_title()
, the_content()
и подобныеWP_Query()
, то и переменные устанавливаются из этого же запроса ( $query->have_posts(), $query->the_post() )// Задаем нужные нам критерии выборки данных из БД
$args = array(
'posts_per_page' => 5,
'orderby' => 'comment_count'
);
$query = new WP_Query( $args );
// Цикл
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
the_title(); // Заголовок
the_content(); // Контент
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post
wp_reset_postdata();
get_posts()
— это обертка для класса WP_Query
с несколькими предустановленными параметрами. Установка переменной $post делается с помощью функции setup_postdata()
и в целом тот же цикл выглядит немного по другому// Задаем нужные нам критерии выборки данных из БД
$args = array(
'posts_per_page' => 5,
'orderby' => 'comment_count'
);
$my_posts = get_posts( $args );
// Цикл
if ( $my_posts ) {
foreach ( $my_posts as $key => $post ) {
setup_postdata( $post );
the_title(); // Заголовок
the_content(); // Контент
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post
wp_reset_postdata();
the_title()
, the_content()
, get_template_part()
и т.д., вместо их использования вы можете доставать данные напрямую из объекта. Например, такая конструкция тоже будет работать$args = array(
'posts_per_page' => 5,
'orderby' => 'comment_count'
);
$my_posts = get_posts( $args );
foreach ( $my_posts as $key => $post ) {
echo $post->post_title; // Заголовок
echo $post->post_content; // Контент
}
$args = [
'post_type' => 'info',
'posts_per_page' => 24,
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => 'city',
'field' => 'name',
'terms' => [ 'Рязань' ]
],
[
'taxonomy' => 'categ',
'field' => 'name',
'terms' => [ 'МВД' ]
]
]
];
$query = new WP_Query( $args );
// Цикл.
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
the_title(); // выводим заголовок
}
} else {
// Постов не найдено
}
// Возвращаем оригинальные данные поста. Сбрасываем $post.
wp_reset_postdata();
get_the_content()
. Универсальных методов решения вашей задачи НЕТ. Вы можете разобрать строку регулярками или использовать какой-нибудь DOM-парсер, например Simple HTML DOM Parserthe_content
add_filter( 'the_content', 'filter_function_name_11' );
function filter_function_name_11( $content ) {
// Фильтр...
return $content;
}
get_the_terms()
— получает элементы таксономии (термины), которые относятся к указанному посту (записи)$terms = get_the_terms( $post->ID, 'city' );
if( is_array( $terms ) ) {
foreach ( $terms as $key => $term ) {
echo '<a href="' . get_term_link( $term->term_id, $term->taxonomy ) . '">' . $term->name . '</a>,';
}
}
wpautop
заменяет двойной перенос строки на HTML конструкцию <p>...</p>
, а одинарный на <br>
add_filter( 'term_description', 'wpautop' );
add_filter( 'get_the_post_type_description', 'wpautop' );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_excerpt', 'wpautop' );
add_filter( 'comment_text', 'wpautop', 30 );
add_filter( 'widget_text_content', 'wpautop' );
add_filter( 'the_excerpt_embed', 'wpautop' );
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
<?php get_header(); ?>
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php if ( have_posts() ) : ?>
<header class="page-header">
<?php
the_archive_title( '<h1 class="page-title">', '</h1>' );
the_archive_description( '<div class="taxonomy-description">', '</div>' );
?>
</header>
<?php while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/content', get_post_format() );
endwhile;
the_posts_pagination(
array(
'prev_text' => __( 'Previous page', 'twentysixteen' ),
'next_text' => __( 'Next page', 'twentysixteen' ),
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
)
);
else :
get_template_part( 'template-parts/content', 'none' );
endif; ?>
</main>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
get_category_link()
по переданному $category_id. На будущее вам пригодится иерархия шаблонов WordPress