wp_update_post()
, чтобы обновить нужные вам данные:// получаем все посты
$my_posts = get_posts( array(
'numberposts' => -1,
'post_type' => 'post',
) );
foreach ( $my_posts as $key => $my_post ) {
// как-то обрабатываем контент, например, убираем регуляркой перечисленные символы
$content = preg_replace('/([\^\%]+)/', '', $my_post->post_content);
$post_data = array(
'ID' => $my_post->ID,
'post_content' => $content,
);
// пушим контент обратно
$post_id = wp_update_post( wp_slash( $post_data ) );
// пишем ошибку/ успех
if( is_wp_error($post_id) ) {
var_dump( 'Ошибка обновления поста ' . $my_post->post_title . ': ' . $post_id->get_error_message() );
} else {
var_dump( 'Пост ' . $my_post->post_title . ' обновлен удачно!' );
}
}
save_post
создается бесконечный цикл, т.к. wp_update_post()
сам по себе вызывает save_post
и его нужно отключать wp_head
add_action( 'wp_head', 'skill_noindex', 1 );
if ( !function_exists( 'skill_noindex' ) ) {
function skill_noindex() {
// закрываем от индексации пустые архивные страницы (таксономии, категории, теги)
if( is_archive() && !have_posts() ) {
echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
}
// закрываем от индексации категорию "отзывы"
if ( is_category( 'testimonials' ) ) {
echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
}
// проверяем, что тип записи - post, но достаточно проверять is_single()
if ( get_post_type() === 'post' ) {
// получаем категории поста
if ( $categories = get_the_category( get_queried_object_id() ) ) {
foreach ( $categories as $key => $category ) {
// проверяем, что в массиве есть категория Новости
if ( $category->slug == 'news' ) {
echo '<meta name="robots" content="noindex, nofollow, noarchive"/>';
}
}
}
}
}
}
add_filter( 'wp_robots', 'skill_robots' );
if ( !function_exists( 'skill_robots' ) ) {
function skill_robots( $robots ) {
if ( is_archive() && !have_posts() ) {
$robots['noindex'] = true;
$robots['nofollow'] = true;
}
$robots['max-snippet'] = '-1';
$robots['max-image-preview'] = 'large';
$robots['max-video-preview'] = '-1';
return $robots;
}
}
wp_head()
в теме вообще есть?init
, after_setup_theme
и сравнивайте с дефолтной темой if ( is_front_page() && is_home() ) {
$html = '<div class="site-branding">';
$html .= '<h1 class="site-branding__title">' . get_bloginfo( 'name' ) . '</h1>';
$html .= '<p class="site-branding__description">' . get_bloginfo( 'description') . '</p>';
$html .= '</div>';
} else {
$html = '<a class="site-branding" href="' . esc_url( home_url( '/' ) ) . '" rel="home">';
$html .= '<h1 class="site-branding__title">' . get_bloginfo( 'name' ) . '</h1>';
$html .= '<p class="site-branding__description">' . get_bloginfo( 'description') . '</p>';
$html .= '</a>';
}
echo apply_filters( 'get_site_branding', $html );
apply_filters()
, вы можете изменить вывод контента через дочернюю тему, написав соответствующий фильтрinit
, after_setup_theme
, фильтры контента, регулярки, может даже js $myQuery = new WP_Query( [
'meta_query' => [
'relation' => 'OR',
'price_exists' => [
'relation' => 'AND',
[
'key' => '_project_price',
'value' => $price_from,
'type' => 'DECIMAL',
'compare' => '>='
],
[
'key' => '_project_price',
'value' => $price_to,
'type' => 'DECIMAL',
'compare' => '<='
],
],
'price_empty' => [
'key' => '_project_price',
'compare' => 'EXIST',
],
],
'orderby' => [
'price_exists' => 'ASC',
'price_empty' => 'DESC',
],
] );
BETWEEN
найдет все ключи с заданным диапазоном между $price_from и $price_to, а второй NOT BETWEEN
- которые в диапазон не входят$myPosts = get_posts( array(
'numberposts' => -1,
'post_type' => 'product',
) );
foreach ( $myPosts as $key => $myPost ) {
// проверяем, что поля не существует
if ( get_post_meta( $myPost->ID, '_project_price', true ) == false ) {
update_post_meta( $myPost->ID, '_project_price', '' ); // пишем в него пустое значение
}
}
save_post
, чтобы при сохранении поста добавлялось пустое значение, если оно не указано