Ответы пользователя по тегу WordPress
  • Реализация плагином wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Обычные кастомные поля при помощи ACF или carbon fields и все. Там нет ничего сложного.
    Скачать плагин - https://www.advancedcustomfields.com/
    А для сетки "Языковые программы" готовый код можете взять отсюда bootsnipp.com
    Ответ написан
    Комментировать
  • Как очистить сайт от "вирусов"?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    установите Wordfence и просканируйте сайт. Вполне может быть, что премиум плагины, которые вы устанавливаете будучи обнуленными загрязнены вредоносным кодом. Обычно, Wordfence показывает, где может быть проблема...
    Ответ написан
  • Как вывести записи блога в нестандартном ввиде?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Если вкратце, то можно вывести одним блоком... только в цикле завести счетчик.. по завершению 4-х записей (2 в ряд ) ... добавлять записи по 3 в ряд...
    А можно вывести 2-мя циклами... первый выведет 4 записи, а второй выведет остальные записи по 3...
    наверное, первый вариант предпочтительнее
    Ответ написан
    Комментировать
  • Как реализовать "банковское" меню на Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Установите плагин Ubermenu (платный) и можете импровизировать, как пожелаете)
    https://wpmegamenu.com/
    Ответ написан
    Комментировать
  • Какой pagebuilder для Wordpress лучше?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Если уж пользоваться, то на мой взгляд WPBakery Visual Composer... А так не люблю редакторы...
    Ответ написан
    Комментировать
  • Как настроить пагинацию к WP_Query с чпу?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Ссылка на статью- dimox.name/wordpress-pagination-without-a-plugin
    Сам регулярно использую.
    Ответ написан
    4 комментария
  • Как сделать автовыбор шаблона для single.php?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте
    Изучите иерархию шаблонов....
    Для кастомного типа записи надо файл назвать правильно - single-название_кастомного_поста.php
    Тогда он будет автоматически назначен для кастомного типа записи.
    https://codex.wordpress.org/Post_Type_Templates
    Ответ написан
    4 комментария
  • Woocommerce письма с заказами в спам?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Установите плагин WP MAIL SMTP и настройте smtp отправку писем. Скорее всего у вас отрабатывает стандартная пересылка рнр через wp_mail()
    Ответ написан
    1 комментарий
  • Как создавать кастомные записи без родительской страницы в WordPress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Не совсем понял ваш вопрос, если честно... Что вы подразумеваете под кастомной записью (кастомный тип записи или просто пользовательская запись post). И что вы имеете ввиду по родительской страницей - (рубрика записи или шаблон Index,php ... или что)
    Шаблоном single-название.php вы можете задать свой шаблон / стиль для конкретной записи или записей (назначив этот шаблон в настройках записи).
    Ответ написан
  • Как отключить лайтбоксы на сайте к изображениям Wordpress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Смотря, что именно добавлят эти самые лайтбоксы...
    Это может быть плагин или тема... А далее можно например, в консоли глянуть обработчик, который установлен на клик на изображании, найти скрипт, установить плагин Query Monitor найти handle этого скрипта, а далее добавить в functions.php:
    functions disableLightBox() {
    wp_deregister_script('HANDLE');
    wp_dequeue_script('HANDLE');
    }
    add_action('wp_enqueue_scripts', 'disableLightBox');

    P.S. не забудьте заменить handle на нужный.
    Ответ написан
    Комментировать
  • Как исправить ошибку PHP "Cannot modify header information - headers already sent by"?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Что самое интересное - такая проблема у меня тоже встречалась и как показывает опыт может быть она по разным причинам....
    Чтобы устранить ее попробуйте следующие варианты:
    1) наличие лишних символов (которые вы уже проверили)
    2) наличие пробела (в самом начале)
    3) поврежденные или недостающие файлы темы (синхронизируйте при помощи Total commander и посмотрите, что отличается или чего не хватает).
    Обычно, такая проблема наблюдается, если вы скачали обнуленную тему или плагин бесплатно, а горе "хакеры" поставляли кучу обфусцированного рнр кода в файлы темы... Посмотрите в header.php или в файл, которые он может вызывать. Посмотрите в functions.php Просканируйте плагином Wordfence и Theme Check и проверьте тему на наличие ошибок и вредоносного кода... Проверьте корректность подключения header & footer.php. Попробуйте обновить тему до актуальной версии. Попробуйте поочередно отключать плагины и смотрите, пропадет ли проблема (иногда проблема может быть имено в плагинах). Проверьте файл wp-config.php
    Ответ написан
    1 комментарий
  • Как добавлять в Contact Form 7 в select новые значения option?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    А зачем вы так сильно паритесь. Не легче ли создать контактную форму через ACF и добавляйте туда кучу options, как пожелаете))
    В конце этой статьи есть пункт Contact Form, которая работает через wp_mail()
    https://www.advancedcustomfields.com/resources/usi...
    Ответ написан
    Комментировать
  • Как Добавить поле в таблицу wp_posts?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Установите плагин ACF. Создайте необходимые кастомные поля. Если мне память не изменяет, то он добавит их в таблицу wp_postmeta
    Ответ написан
  • Как и чем вы защищаете свои WordPress-сайты - плагины, решения?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    1) Wordfence
    2) Надежный хостинг
    3) Cleantalk для защиты от СПАМа или Akismet
    4) Clearfy
    5) Если устанавливаете обнуленные плагины, то тщательно изучайте их содержимое (частая проблема, которая встречается)
    Ответ написан
    3 комментария
  • Как восстановить работоспособность админки WP?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Подозреваю, что проблема не в админке, а скорее в БД.
    На всякий случай сделайте следующее:
    1) скачайте ту же версию ВП и синхронизируйте ВП через Тотал коммандер. Если есть недостающие файлы, то залейте их туда.
    2) скорее всего у вас при переносе сайта БД была повреждена или импортирована неполностью из-за чего ваш "админ" потерял эти права и не видит кнопку "Обновить" и другие его привилегии. Инструкция по восстановлению прав - https://wordpress.stackexchange.com/questions/4094...
    Ответ написан
    6 комментариев
  • Как изменить вид уведомлений в плагине Contact Form 7?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Вдруг, информация по ссылке будет полезной -
    https://contactform7.com/customizing-validation-er...
    Ответ написан
    Комментировать
  • Как вывести сообщения с БД на страницу Contact Form 7?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Создайте шаблон страницы, а потом при помощи WP_Query, если это кастомный пост или при помощи wpdb извлеките данные из БД. Пройдитесь циклом и добавьте данные.
    А для удобства, вообще я бы рекомендовал использовать:
    1) кастомный тип записи + кастомные поля (плагин ACF)
    2) А дальше при помощи WP_Query выводите отзывы и все...
    Ответ написан
    Комментировать
  • Какой плагин лучший? ACF, CMB2, Pods, MetaBox?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Лично я, преимущественно, использую ACF Pro. А вообще я выбирал бы между ACF Pro или Carbon Fields. До сих пор не наблюдал серьезных проблем с ACF.
    Ответ написан
    Комментировать
  • Как вывести метки на яндекс карту взяв адреса из кастомных полей записей?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    Нечто похожее нам приходилось реализовать для одного клиента.
    Единственное отличие - метка добавляется не из катомных записей, а на конкретной странице, на которой при помощи ACF Repeater созданы кастомные поля.
    Краткая инструкция:
    1) Создайте поле ACF Repeater + 2 кастомных поля Широта и Долгота и выведите на странице
    2) При помощи яндекс карт (https://yandex.ru/maps/) клиент находит координаты объекта и прописывает его через repeater в кастомные поля Широта и Долгота.
    3) Создайте шаблон (скопируйте page.php) и назначьте его для созданной вами страницы.
    Пример подобного шаблона:
    В данном коде присутствует лишний код. Но думаю, что вы найдете необходимые участки...
    Пример шаблона
    <div class="container content-page">
    		<div class="page-content">
    			<div class="row">
    				<div class="content col-md-12">
    					<div id="customMap" class="YMaps" style="width:100%;height:400px;">
    					</div>
    					<?php if( have_rows('example_mebel') ): ?>
    						<?php $yamap = [];?>
    						<?php while( have_rows('example_mebel') ): the_row(); ?>
    							<!-- baloon content -->
    							<?php $example_title = get_sub_field('example_title') ?>
    							<?php $example_address = get_sub_field('example_address') ?>
    							<?php $example_phone = get_sub_field('example_phone') ?>
    							<?php $example_time = get_sub_field('example_time') ?>
    							<?php 
    
    	$example_placemark_type = array
    	("twirl#darkgreenStretchyIcon","twirl#greenStretchyIcon"); 
    
    								// $example_placemark_type = array("twirl#redIcon", "twirl#darkblueIcon", "twirl#pinkIcon", "twirl#darkorangeIcon", "twirl#violetIcon"); 
    							?>
    							<!-- baloon content -->
    							<?php $tempID = get_sub_field( 'example_id'); ?>
    							<?php $cityName = get_sub_field( 'example_city'); ?>
    							<?php if( have_rows('example_places') ): while( have_rows('example_places') ): the_row();  ?>
    								<?php $example_longitude = get_sub_field( 'example_longitude'); ?>
    								<?php $example_lattitude = get_sub_field( 'example_lattitude'); ?>
    								
    							
    							<!---->
    
    							<?php
    								array_push
    								(
    									$yamap,
    									[
    										"lat" => $example_lattitude,
    										"lon" => $example_longitude,
    										"header" => $example_title,
    										"address" => $example_address,
    										"time" => $example_time,
    										"footer" => $example_phone,
    										"placemark" => $example_placemark_type[array_rand($example_placemark_type)],
    										"id" => $tempID,
    										"city" => $cityName
    									]
    								);
    
    							?>
    								<?php endwhile; endif; ?>
    						<?php endwhile; ?>
    					<?php endif; ?>
    				</div>
    				<div style="padding: 10px 0 !important; clear: both;"></div>
    				<div class="content col-md-12">
    					<?php if( have_rows('example_mebel') ): ?>
    						<div class="example_accordion">
    							<div class="panel-group" id="accordion">
    
    						<?php while( have_rows('example_mebel') ): the_row(); ?>
    							
    							<!--example_places-->
    								<!-- begin object -->
    								
    										<!-- ** -->
    										<?php if ($example_title = get_sub_field('example_title')) { ?>
    											<?php ($example_id = get_sub_field('example_id')); ?>
    										
    
    										 
    											<div class="panel panel-default">
    											  <div class="panel-heading">
    												<h4 class="panel-title">
    												  <a data-toggle="collapse" data-parent="#accordion" href="#<?php echo $example_id ?>"><?php echo $example_title ?><?php if ($example_city = get_sub_field('example_city')) { ?><span style="float:right;"><?php echo $example_city  ?></span><?php } ?></a>
    												</h4>
    											  </div>
    											  <div id="<?php echo $example_id ?>" class="panel-collapse collapse">
    												<div class="panel-body">
    													<?php if ($example_address = get_sub_field('example_address')) { ?>
    														<div class="faq_answer"><span class="fa fa-map-marker"><?php echo $example_address ?></span></div>
    													<?php } ?>
    													<?php if ($example_time = get_sub_field('example_time')) { ?>
    														<div class="faq_answer"><span class="fa fa-clock-o"><?php echo $example_time ?></span></div>
    													<?php } ?>
    													<?php if ($example_phone = get_sub_field('example_phone')) { ?>
    														<div class="faq_answer"><span class="fa fa-phone"><?php echo $example_phone ?></span></div>
    													<?php } ?>
    													<?php if ($example_mail = get_sub_field('example_mail')) { ?>
    														<div class="faq_answer"><span class="fa fa-at"><?php echo $example_mail ?></span></div>
    													<?php } ?>
    													<div class="gallery">
    														<?php $images = get_sub_field('example_gallery');
    															if( $images ): ?>
    																<ul>
    																	<?php foreach( $images as $image ): ?>
    																		<li>
    																			<a href="<?php echo $image['url']; ?>">
    																				 <img src="<?php echo $image['sizes']['thumbnail']; ?>" alt="<?php echo $image['alt']; ?>" />
    																			</a>
    																		</li>
    																	<?php endforeach; ?>
    																</ul>
    														<?php endif; ?>
    													</div>
    												</div>
    												<div class="panel-footer">
    													
    												</div>
    											  </div>
    											</div>
    										  
    										<?php } ?>
    								
    								<!-- end object -->
    						<?php endwhile; ?>
    							</div>
    						</div>
    					<?php endif; ?>
    				</div>
    			</div><!-- end row-fluid -->
    		</div>
    	</div><!-- end container -->
    <?php echo "<script type=\"text/javascript\"> var points=".json_encode($yamap, true)."</script>" ?>;


    4) Далее подключите 2 скрипта для данной страницы:
    function register_scripts_map() {
    		wp_register_script('custom', get_stylesheet_directory_uri() .
    			'/js/custom.js');
    		wp_enqueue_script('custom');	
    		wp_register_script("yMapJS", "https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU");
    		wp_enqueue_script("yMapJS");
    }
    
    add_action('wp_enqueue_scripts', 'register_scripts_map');

    5) Содержимое скрипта custom.js
    custom скрипт
    var zoom = 16,
        // mapCenter = [55.709992,37.654287];
        // mapCenter = [points[0].lat, points[0].lon],
        referenceCity = ['Москва', 'Санкт-Петербург'],
        mapAlwaysReady = false;    
    var customMap,
        mapCenter;
    function showCurrentPlace(event)
    {
        event.preventDefault();
        var currentSelectedItem = jQuery(this).find('a').attr('href').substr(1),
        currentSelectedPoint = 
            points.filter(function(item){return item.id == currentSelectedItem;})[0];
        if(mapAlwaysReady)
        {        
            customMap.setCenter([currentSelectedPoint.lat, currentSelectedPoint.lon]);
            customMap.setZoom(zoom);
        }    
        console.table(currentSelectedPoint);
    }
    
    function getMinMax(sourceArray, field)
    {
        var maxPrice = Math.max.apply(Math, sourceArray.map(function(item){return item[field];})),
            minPrice = Math.min.apply(Math, sourceArray.map(function(item){return item[field];})) 
        return {max: maxPrice, min: minPrice};
    }
    function mapReady()
    {   
        customMap = new ymaps.Map('customMap', 
        {
            center: mapCenter,
            zoom: zoom
        });
    
        points.forEach(function(item)
        {
            customMap.geoObjects.add
            (
                new ymaps.Placemark
                (
                    [item.lat, item.lon], 
                    {
                        iconContent: item.header, 
                        balloonContentHeader: item.header, 
                        balloonContentBody: 
                            item.address + 
                            '<br>' +
                            item.time
                            , 
                        balloonContentFooter: item.footer
                    },
                    {
                        preset: item.placemark //"twirl#pinkStretchyIcon"
                    }
                )
            );    
        });
        mapAlwaysReady = true;    
        var tempBounds = points.reduce
        (
            function(prev, cur)
            {       
                // return referenceCity.filter(function(itemCity)
                // {
                //     return itemCity == cur.city;
                // }).length > 0 ? prev.concat({lat: cur.lat, lon: cur.lon}) : prev; 
                return prev.concat({lat: cur.lat, lon: cur.lon});
            }, 
            []
        ),
        referenceBounds = 
        {
            lats: getMinMax(tempBounds, 'lat'),
            longs: getMinMax(tempBounds, 'lon'),
        };
        customMap.setBounds
        (
            [
                [referenceBounds.lats.min, referenceBounds.longs.min], 
                [referenceBounds.lats.max, referenceBounds.longs.max]
            ]
        );
    }

    Конечный результат - https://massimomebel.com/gde-kupit
    Конечно же вам придется переделать скрипт, чтобы собирать метки из кастомных записей, а не со страницы. Но в целом идея похожа.
    Если вас устроит идея добавления маркеров на основе Google Maps, то тут подробная инструкция об интеграции с CPT https://wpbeaches.com/create-multiple-marker-map-f...
    Ответ написан
    4 комментария