возможно ли изначально организовать процесс так, чтобы потом не было проблем с миграцией одного или нескольких сайтов на другой хостинг?
насколько сложно мигрировать с поддомена на отдельный домен оставаясь в системе WordPress MU?
насколько трудоемким будет процесс клонирования заранее заготовленных шаблонных сайтов?
можно ли устанавливать плагины централизованно, сразу для всех сайтов?
можно ли устанавливать темы централизованно, сразу для всех сайтов?
как лучше всего создавать "точки восстановления" состояния сайтов?
add_action()
, а убираются с помощью remove_action()
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_sale_flash', 10 );
remove_action( 'woocommerce_before_single_product_summary', 'woocommerce_show_product_images', 20 );
the_posts_pagination()
работает только с глобальным циклом, возьмите рабочий пример отсюда getField_Address()
, если это возможно на хуке wp_enqueue_scripts
, то вы можете подключить ваш код с помощью wp_add_inline_script()
add_action( 'wp_enqueue_scripts', function(){
wp_enqueue_script( 'my_scripts', get_stylesheet_directory_uri() .'/my_scripts.js' );
$html_res = getField_Address($datafield_address);
// добавим произвольный код
wp_add_inline_script( 'my_scripts', $html_res[1] );
} );
wp_footer
wp_insert_attachment()
, то можете передать ID поста, к которому нужно прикрепить запись третьим параметром $parent_post_idwp_insert_attachment( $attachment, $filename, $parent_post_id, $wp_error, $fire_after_hooks );
set_post_thumbnail()
, первым параметром передаете ID записи, вторым ID медиафайлаset_post_thumbnail( $post, $thumbnail_id );
scandir()
, которая получает список файлов и каталогов, расположенных по указанному пути. Получаете файлы в указанном каталоге, выводите в нужной вам разметке по примеру$directory_uri = get_stylesheet_directory_uri() . '/data/nft/';
$directory = get_stylesheet_directory() . '/data/nft/';
echo '<div class="masonry-container">';
echo '<div class="row no-gutters masonry-gallery popup-gallery">';
foreach ( scandir( $directory ) as $key => $file_name ) {
if ( ! in_array( $file_name, ['.', '..'] ) && file_exists( $directory . $file_name ) ) {
echo '<a href="' . $directory_uri . $file_name . '" class="col-12 col-sm-6 col-lg-4 col-xl-3 masonry-item" title="#">';
echo '<img src="' . $directory_uri . $file_name . '" class="masonry-image" alt="#"/>';
echo '</a>';
}
}
echo '</div>';
echo '</div>';
if ( is_user_logged_in() ) {
$current_user = wp_get_current_user();
if ( in_array( $current_user->nickname, 'anubis', 'bast', 'ra', 'osiris' ) ) {
# code...
}
}
function user_has_role( $user_id, $role_name ) {
$user_meta = get_userdata( $user_id );
$user_roles = $user_meta->roles;
return in_array( $role_name, $user_roles );
}
if ( is_user_logged_in() && user_has_role( get_current_user_id(), 'student' ) ) {
# code...
}
robots_txt
. Управлять им можно следующим образом// Добавляем правила для файла robots.txt
add_filter( 'robots_txt', 'wpgen_robots_txt', 20, 2 );
function wpgen_robots_txt( $output, $public ) {
$output .= "Disallow: /wp-json\n";
return apply_filters( 'wpgen_robots_txt', $output, $public );
}
if ( is_single() && get_the_ID() === 12 ) {
// code...
}
// задаем нужные нам критерии выборки данных из БД
$args = array(
'posts_per_page' => 5,
);
$query = new WP_Query( $args );
$i = 1;
// Цикл
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
if ( $i === 1 ) {
// блок перед первым постом
}
// выводим контент постов
the_title();
$i++;
}
} else {
// постов не найдено
}
// возвращаем оригинальные данные поста. Сбрасываем $post
wp_reset_postdata();
meta_key
запроса wp_query()
$posts = get_posts( array(
'post_type' => 'event',
'meta_key' => 'date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
));
pre_get_posts
add_action( 'pre_get_posts', 'pre_get_events', 1 );
function pre_get_events( $query ) {
if ( $query->is_post_type_archive( 'event' ) ) {
$query->set( 'meta_key', 'date' );
$query->set( 'orderby', 'meta_value_num' );
}
}
get_query_var()
проверяете наличие переменной и меняете основной запросadd_action( 'pre_get_posts', 'custom_pre_get_posts', 1 );
function custom_pre_get_posts( $query ) {
if ( $tag = get_query_var( 'tag', false ) ) {
$query->set( 'tag', $tag );
}
}
get_query_var()
проверять наличие переменной и подменять заголовок с описанием is_tax()
// проверяем, что находимся в терминах audi и bmw таксономии product-category
is_tax ( 'product-category', array( 'audi', 'bmw' ) ) {
}
pre_get_posts
проверяете таксономию и гет-переменную и фильтруете записи для выводаadd_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $qvars ) {
$qvars[] = 'brand';
return $qvars;
}
add_query_arg()
$link = add_query_arg( [ 'brand' => 'rus' ], $cur_link );
get_query_var()
и отфильтровать по примеруadd_action( 'pre_get_posts', 'filter_pre_get_posts', 1 );
function filter_pre_get_posts( $query ) {
// Выходим, если это админ-панель или не основной запрос
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
// Выбираем записи с GET запросами brand
if ( $query->is_tax( 'repair' ) && get_query_var( 'brand', false ) ) {
$tax_query = [];
$tax_query['tax_query'][] = [
'taxonomy' => 'brands',
'field' => 'slug',
'terms' => get_query_var( 'brand', false ),
];
$query->set( 'tax_query', $tax_query );
}
}
wp_query()
делаете выборку записей, собираете координаты в json по шаблону из документации и передаете скрипту карты на вывод $args = [
'post_type' => 'location',
'orderby' => 'name',
'order' => 'ASC',
'tax_query' => [
'relation' => 'AND',
[
'taxonomy' => $category->taxonomy,
'field' => 'id',
'terms' => $category->term_id
]
]
];
$locations = get_posts( $args );