Контакты
Местоположение
Россия

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (65)

Лучшие ответы пользователя

Все ответы (604)
  • Как вывести метки на яндекс карту из кастомных полей wordpess?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов zolin.digital
    Посмотрите пример object_manager, примерно так вам нужно собрать данные записей в json для карты:

    $args = array(
    	'post_type'   => 'object',
    );
    
    $query = new WP_Query( $args );
    
    if ( $query->have_posts() ) {
    
    	$mask = array();
    	$mask['type'] = 'FeatureCollection';
    
    	while ( $query->have_posts() ) {
    		$query->the_post();
    
    		$geo = get_post_meta( get_the_ID(), '_geo', true );
    
    		$mask['features'][] = array(
    			'type' => 'Feature',
    			'id' => $key,
    			'geometry' => array (
    				'type' => 'Point',
    				'coordinates' => [(float) $geo['lat'], (float) $geo['lat']],
    			),
    			'properties' => array (
    				'balloonContentBody' => '<strong class="map-title"><a class="link" href="' . get_the_title() . '">' . get_the_title() . '</a></strong>',
    				'balloonContentFooter' => '<a class="hidden" href="#">Я был здесь!</a>',
    				'clusterCaption' => '<strong>' . get_the_title() . '</strong>',
    				'hintContent' => '<strong>' . get_the_title() . '</strong>'
    			)
    		);
    
    	}
    }


    Потом передаете эту переменную json_encode( $mask ) в обработчик в js. В поле _geo должен лежать массив: широта и долгота

    PS Скрипт я выводил с помощью функции wp_add_inline_script(), это не супер подход, но, в моем случае было удобнее всего

    wp_enqueue_script( 'ya-map-api' );
    
    $ya_map_init .= "<script type='text/javascript'>
    
    	jQuery(function($){
    
    		ymaps.ready(init);
    
    		function init () {
    			var map = new ymaps.Map('ya-map', {
    					center: [" . $geo_center . "],
    					zoom: " . $geo_zoom . ",
    					controls: ['geolocationControl' ,'zoomControl'],
    				}, {
    					avoidFractionalZoom: false,
    				}),
    				objectManager = new ymaps.ObjectManager({
    					clusterize: false
    				});
    
    
    			objectManager.objects.options.set('preset', 'islands#nightCircleDotIcon');
    			map.geoObjects.add(objectManager);
    
    			var resortLabels = " . json_encode( $mask ) . ";
    			objectManager.add(resortLabels);
    		}
    
    	});
    
    </script>";
    
    wp_add_inline_script( 'ya-map-api', $ya_map_init );


    В контенте должен быть div и стили для него

    <div id="map" class="map"></div>

    Скрипт должен быть зарегистрирован

    add_action( 'wp_enqueue_scripts', 'ya_scripts' );
    function ya_scripts() {
    
    	$ya_map_key = '96193550-a00q-czce-p3vb-uh52odq1qhil';
    	wp_register_script('ya-map-api', 'https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=' . $ya_map_key . '', array('jquery'), null, true);
    
    }


    Если у вас десятки тысяч объектов, желательно куда-то кешировать эти данные и обновлять только когда обновился какой-то объект на сайте
    Ответ написан
  • Как сделать пагинацию WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов zolin.digital
    // получаем номер страницы пагинации
    $current = absint( max( 1, get_query_var( 'paged' ) ? get_query_var( 'paged' ) : get_query_var( 'page' ) ) );
    
    // собираем запрос
    $my_query = new WP_Query( [
    	'post_type'      => 'page',
    	'posts_per_page' => 10,
    	'paged'          => $current,
    ] );
    
    if ( $my_query->have_posts() ) {
    
    	// основной цикл
    	while ( $my_query->have_posts() ) {
    		$my_query->the_post();
    
    		###########
    	}
    
    	wp_reset_postdata(); // возвращаем глобальный цикл
    	
    	// выводим пагинацию
    	echo wp_kses_post(
    		paginate_links( [
    			'total'   => $my_query->max_num_pages, // количество берем из дефолтной опции запроса
    			'current' => $current, // текущая страница
    		] )
    	);
    } else {
    	// выводим шаблон "нет контента", если в запросе нет постов
    	get_template_part( 'templates/content', 'none' );
    }
    Ответ написан
  • Как в wordpress в базе данных (phpMyAdmin) сделать 4000 копий одной страницы?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов zolin.digital
    На счет базы не подскажу, но вы можете воспользоваться нативными функциями get_posts() и wp_insert_post()

    // получаем данные исходного поста по слагу
    $post_slug = '1543';
    $args = array( 'name' => $post_slug, 'post_type' => 'post', 'post_status' => 'publish, draft, future', 'numberposts' => 1 );
    $post = get_posts($args)[0];
    
    for ( $i = 1; $i < 2771; $i++ ) {
    	// Создаем массив данных новой записи
    	$post_data = array(
    		'ID'		=> $post->ID++,        
    		'post_title'	=> $post->post_title,
    		'post_name'		=> $post_slug . '-' . $i,  
    		'post_date'		=> $post->post_date,
    		'post_date_gmt'	=> $post->post_date_gmt,    
    		'post_content'	=> $post->post_content,
    		'post_status'	=> 'publish',
    		'post_type'		=> 'post',
    		'post_author'	=> 1,
    	);
    
    	// Вставляем запись в базу
    	$post_id = wp_insert_post( wp_slash( $post_data ) );
    
    	// пишем ошибку/успех
    	if( is_wp_error( $post_id ) ) {
    		var_dump( 'Ошибка инсерта поста ' . $post->post_title . ' таксономии category: ' . $post_id->get_error_message() );
    	} else {
    		var_dump( 'Пост ' . $post->post_title . ' таксономии category опубликован удачно!' );
    		//wp_set_object_terms( $post_id, 'cat_id', 'category' ); // если нужно назначить категорию, заменить cat_id
    	}
    }


    Поменяйте слаги на нужные, я так и на понял какие вам нужны
    Ответ написан