body_class()
и post_class()
if ( ! function_exists( 'get_wpgen_header_classes' ) ) {
/**
* Get classes for header container.
*
* @param string $class Additional header classes.
*
* @return array
*/
function get_wpgen_header_classes( $class = '' ) {
// Add elements to array.
$classes = array();
$classes[] = 'header';
if ( has_custom_header() ) {
$classes[] = 'header--background-image';
}
if ( is_front_page() || is_home() ) {
$classes[] = 'header-bg';
} else {
$classes[] = 'custom-class';
}
// Check the function has accepted any classes.
if ( isset( $class ) && ! empty( $class ) ) {
if ( is_array( $class ) ) {
$classes = array_merge( $classes, $class );
} elseif ( is_string( $class ) ) {
$classes = array_merge( $classes, explode( ' ', $class ) );
}
}
$classes = apply_filters( 'get_wpgen_header_classes', $classes );
// Usage:
/*add_filter( 'get_wpgen_header_classes', 'my_header_classes' );
if ( ! function_exists( 'my_header_classes' ) ) {
function my_header_classes( $classes ) {
$classes[] = 'my-class';
return array_unique( $classes );
}
}*/
return array_unique( (array) $classes );
}
}
if ( ! function_exists( 'wpgen_header_classes' ) ) {
/**
* Display classes for header container.
*
* @param string $class Additional header classes.
* @param bool $echo Echo or return header classes.
*
* @return string
*/
function wpgen_header_classes( $class = '', $echo = true ) {
$classes = get_wpgen_header_classes( $class );
if ( $echo ) {
echo 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
} else {
return 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
}
}
}
<header id="header" <?php wpgen_header_classes(); ?>>
<header id="header" <?php wpgen_header_classes( 'new-class' ); ?>>
<form id="filter">
<div class="search-holder">
<input type="search" name="s" id="s" class="input-text" placeholder="<?php esc_attr_e( 'Поиск вакансий' ); ?>" value="<?php echo get_search_query(); ?>">
<?php
$terms_loaction = get_terms(
array(
'taxonomy' => 'location',
'hide_empty' => false,
)
);
?>
<?php
if ( $terms_loaction ) :
?>
<select name="city" class="select-block mobile-hide">
<option value=""><?php esc_html_e( 'Город' ); ?></option>
<?php
foreach ( $terms_loaction as $location ) :
?>
<option value="<?php echo esc_attr( $location->term_id ); ?>"><?php echo esc_html( $location->name ); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
<ul class="filter-list mobile-hide">
<li>
<label class="checkbox-block">
<input type="checkbox" name="is_free_live">
<span><?php esc_html_e( 'Бесплатное проживание' ); ?></span>
</label>
</li>
...
</ul>
<button type="submit" class="ajax-filter-btn btn"><?php esc_html_e( 'Найти вакансию' ); ?></button>
</div>
<input type="hidden" name="action" value="filter_vacancy">
</form>
add_action( 'wp_enqueue_scripts', function() {
$my_args = array(
'post_type' => 'offers',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
),
'meta_query' => array(
'relation' => 'AND',
),
);
$my_query = new WP_Query( $my_args );
wp_register_script('ajax_js', get_stylesheet_directory_uri() . '/js/ajax.js', array('jquery'), time(), true);
wp_localize_script( 'ajax_js', 'ajax_obj', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'posts' => json_encode( $my_query->query_vars ),
'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,
'max_page' => $my_query->max_num_pages,
) );
wp_enqueue_script('ajax_js');
});
// FILTER
function filter_vacancy(){
$args = array(
'post_type' => 'offers',
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
),
'meta_query' => array(
'relation' => 'AND',
),
);
if( !empty( $_POST['city'] ) && $_POST['city'] ) {
$args['tax_query'][] = array(
'taxonomy' => 'location',
'field' => 'id',
'terms' => $_POST['city'],
);
}
if( isset( $_POST['is_free_equipment'] ) && $_POST['is_free_equipment'] ) {
array_push($args['meta_query'][] = array(
'key' => 'is_free_equipment',
'value' => true,
'compare' => '=',
)
);
}
if( !empty( $_POST['s'] ) ) {
$args['s'] = sanitize_text_field($_POST['s']);
}
query_posts( $args );
global $wp_query;
if ( have_posts() ) :
ob_start();
while ( have_posts() ) :
the_post();
get_template_part( 'template-parts/offers/offers', 'list' );
endwhile;
$response = ob_get_contents();
ob_end_clean();
else:
$response = 'По запросу нет вакансий';
endif;
echo json_encode( array(
'posts' => json_encode( $wp_query->query_vars ),
'max_page' => $wp_query->max_num_pages,
'found_posts' => $wp_query->found_posts,
'content' => $response,
) );
die();
}
add_action('wp_ajax_filter_vacancy', 'filter_vacancy');
add_action('wp_ajax_nopriv_filter_vacancy', 'filter_vacancy');
$('#filter').on('submit', function (e) {
e.preventDefault();
var filter = $(this);
$.ajax({
type: 'POST',
url: ajax_obj.ajaxurl,
data: filter.serialize(),
dataType : 'json',
beforeSend: function(xhr){
},
success: function (data) {
$('.offers-list').html(data.content);
ajax_obj.posts = data.posts;
},
});
});
is_home()
— проверяет показывается ли страница с последними постамиget_theme_file_uri()
, которую редко используют из-за кучи старых гайдов. Она ищет файл сначала в дочерней теме, если его там нет, то берет его из основнойfilemtime()
. Это нужно, чтобы браузер не кешировал измененные файлы и всегда показывал только актуальную версиюis_page()
проверяю слаги постов. Но это уже вкусовщинаfunction custom_scripts_init() {
// общие стили
wp_enqueue_style( 'common-styles', get_theme_file_uri( 'assets/css/common.min.css' ) , array(), filemtime( get_theme_file_path( '/assets/css/common.min.css' ) ) );
// общие скрипты
wp_enqueue_script( 'common-scripts', get_theme_file_uri( 'assets/js/common.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/common.min.js' ) ), true );
// скрипты для страницы постов
if ( is_home() ) {
wp_enqueue_script( 'home-scripts', get_theme_file_uri( 'assets/js/home.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/home.min.js' ) ), true );
}
// скрипты для массива страниц
if ( is_page( ['sample-page', 'contacts'] ) ) {
wp_enqueue_script( 'page-scripts', get_theme_file_uri( 'assets/js/page.min.js' ), array( 'jquery' ), filemtime( get_theme_file_path( '/assets/js/page.min.js' ) ), true );
}
}
add_action( 'wp_enqueue_scripts', 'custom_scripts_init' );
PHP-код, встроенный в страницу будет разбирать строку GET-запроса от API сервиса бронирования и, на основании данных из запроса, формировать сообщение о результате бронирования.
if ( $condition ) {
get_template_part( 'templates/thankyou' );
} else {
get_template_part( 'templates/common' );
}
// устанавливаем роль и дату начала тестового периода
function set_user_test_period() {
$current_date = date( 'd-m-Y H:i:s' );
// пишем в мету юзера текущее время
add_user_meta( $user_id, '_test_period_start_date', $current_date, true );
$user = new WP_User( $user_id );
// добавляем роль участника
$user->add_role( 'contributor' );
}
// проверка завершения тестового периода
function check_user_test_period() {
$current_date = date( 'd-m-Y H:i:s' );
$user_id = get_current_user_id();
$test_period_start_date = get_user_meta( $user_id, '_test_period_start_date', true );
$user = new WP_User( $user_id );
// проверяем, что текущая дата больше тестового периода
if ( strtotime( $current_date ) > strtotime( $test_period_start_date . ' + 7 days' ) ) {
// убираем роль участника
$user->remove_role( 'contributor' );
}
}
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' );
}
}
$data = file_get_contents( 'https://steampay.com/api/products' );
if ( ! empty( $data ) ) {
$args = json_decode( $data );
foreach ( $args->products as $one_product ) {
echo $one_product->title . '<br>';
}
}