• Как привязать пользователя linux к сайту WP?

    на папки должны быть права 755, на файлы 644
    менять пользователей не надо(можно наворотить, что потом в системные лог журналы будут сыпаться ероры на отсутствие доступа и они будут вечно большими по объему). надо корректно настроить права доступа (гуглите и желательно вникайте), а для phpfpm обязательно необходима настройка пула
  • Как сделать выпадающее меню при наведении, а закрытие только по клику?

    При ховере добавляете класс элементу, согласно которому показываете через CSS. При клике на вашу кнопку берете основной идентификатор меню и в нем ищете елемент с классом, который добавили... Собственно и убираете все найденные классы visible
  • Как сделать загрузку картинок в запись вордпресс без плагинов?

    vladimiraurelius, примерно, да. т.е. по умолчанию у Вас пустой блок. Но в нем есть блок див, в котором все будет отображаться. Когда вы добавляете метабокс, Вы проверяете, если у Вас есть метаданные в базе, то внутри этого дива через цикл наполняете как надо... А при выборе из библиотеки Вы в тот же див аналогичную разметку добавляете в конец блока, но через jQuery, затем, когда Вы нажмете кнопку сохранить, через событие save_post, либо edit_post, добавленные данные через jQuery сохранятся в базе и их тут же подхватит Ваш цикл и отрисует, но уже из данных в базе...
  • Как сделать загрузку картинок в запись вордпресс без плагинов?

    Вам надо скрипты переписать:
    1. jQuery - параметр multiple выставить в true
    2. jQuery -Заранее создать переменную var upload_IMG;
    3. jQuery - в созданную переменную закидывать все выбранное.
    upload_IMG=custom_uploader.state().get('selection').toJSON();

    4. jQuery - по событию вызываете какую-то функцию, которая возьмет содержимое переменной и распихает по нужным полям, добавить в какой-то блок нужную разметку (те же input type hidden с атрибутами name="uploader_custom[]", но уже под массив - uploader_custom[])
    5. в метабоксе по аналогии проверяем метаданные, но надо будет выводить через foreach

    з.ы. если коротко, то тут почти весь php скрипт надо переписывать и дописывать jQuery. Через jQuery сохраняйте в переменную и выводите в консоль чтобы с ориентироваться... тут же (через jQuery) распихивайте данные по нужной Вам разметке и обрабатывайте (далее пошел php) как Вам удобно в событии save_post с дальнейшим выводом при наличии данных через foreach
  • Почему функция get_categories() не коректно работает если ее вызвать дважды?

    !!!
    ...
    echo '<li></li>'
    ...


    Ваша проблема, заключается не в данном коде.

    В остальном было справедливо подмечено.
    Смысла нет вызывать дважды эту функцию


    $all_categories = get_categories();
    $li_str='';
    if( $all_categories ){
        foreach( $all_categories as $single_cat ){
            $li_str.='<li>' . $single_cat->name . '</li>';
        }
    }
    
    	echo '<ul >';
    		echo $li_str;
    	echo '</ul>';
    			
    	echo '<ul >';
    		echo $li_str;
    	echo '</ul>';
  • Как убрать дублирование меню на сайте?

    Мало инфы. Виновник может быть и javascript. Например при скроле перемещение к фикстопу и обратно...
  • Как подключиться к базе данных из кастомного файла напрямую?

    Ilo555, не правда

    +
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    
    $table_name = $wpdb->get_blog_prefix() . 'my_products';
    $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset} COLLATE {$wpdb->collate}";
    
    $sql = "CREATE TABLE {$table_name} (
        id int(11) unsigned NOT NULL auto_increment,
        name varchar(255) NOT NULL default '',
        price int(11) unsigned NOT NULL default '0',
        PRIMARY KEY  (id),
        KEY price (price)
    ) {$charset_collate};";
    
    dbDelta( $sql );
        $table_name = $wpdb->prefix . 'my_products';
        $wpdb->insert(
    					$table_name,
    					array(
    						'id'=>'111',
    						'name'=>'2222',
    						'price'=>'333'
    					),
    					array( '%s','%s','%s' )
    			 );


    62a232469299a041063050.jpeg
  • Как подключиться к базе данных из кастомного файла напрямую?

    Как подключиться к базе данных из кастомного файла напрямую?


    Подгрузить файл wp-load.php
  • Как сделать 2-ух этапную форму?

    Как сделать 2-ух этапную форму?


    Банальный if else в помощь...

    Если поля по дефолту прошли успешную проверку и были заполнены, выдавайте иную разметку со своими стилями (попап), иначе выдавайте дефолтную разметку...
  • Как сохранять данные из формы и присваивать уникальный промокод?

    на примере с директориями...
    1. Создаем где-то директорию для всех юзеров «all_users».
    2. Выбираем ключ для юзера. допустим это номер телефона. при отправки письма создаем в директории «all_users» папку, где название папки это номер телефона.
    3. все нужные оставшиеся данные ложим в папку
    4. хешируем, миксуем, генерируеми и бла бла бла промо. кидаем в папку «valid», которая в той же папке «номер телефона»
    5. Выводим менеджеру на какой-либо странице список из директорий. если папка «valid» есть, то пишем промокод действителен, если папки нет и нету папки «used», пишем промо нет в базе.
    6. Если промо использован папку «valid» переименовываем в «used»
    7. Закрываем папку от просмотра... index.php, .htaccess, настройки сервера, если есть доступ...

    примерно тоже по аналогии делаем и с базой...

    если понадобится статус просрочен, смотрим в сторону set_transient()
    если слепить картину, то сложного там ничего нет...
  • Как сделать такую же галерею?

    слайдер? галерея? мне больше напоминает банальные табы с горизонтальным расположением заголовков с картинкой в место текста + немного стилей. инфы в интернете просто валом
  • Можно ли так выводить блок?

    Было бы не плохо весь код увидеть...но так на всякий пожарный. Примеры смотрите
  • Зачем в структуре файлов плагина файлы index.php?

    <?php
    // Silence is golden.


    Дело не в шаблонизаторе. Загляните в движок вордпресс, там тоже есть сие файлы.
    Зачем? хмммм... мое мнение...? ибо нефиг... сам частенько так делаю для бонуса где нефиг лазать...
    откройте в браузере, например на OpenServer, какой-либо проект типо local.os/content/uploads
    и вы увидите что-то по типу
    6283a48524933115851393.jpeg

    потому, что так настроен сервер
    но, если мы добавим index.php с содержимым выше, то при попытке снова туда залезть мы увидим!?

    6283a4d10e8af308371053.jpeg
  • Как на WP вставить видео с youtube, чтобы она загрузку страницы не убивала?

    Алексей,
    Просто выводите в каких-либо тегах текст мол смотреть видео жирным шрифтом, а в дата атрибут ссылку кинте. Ну и по клику на тег забирайте дата ссылку и разверните ифрайм с затемнением контента....


    я таким образом делаю:

    <div class="youtuBik" data-src="https://www.youtube.com/embed/neHA4MJwpnY">Смотреть видео на ютуб канале «Пилот, разборы, ответы и лайвы»</div>


    $(document).on('click','.youtuBik',function(){
    	var youtuBik=document.createElement('div'),he=$(window).height();
    	youtuBik.className="VAB_youtuBik";
    	youtuBik.innerHTML	= '<style>'+
    													'.VAB_youtuBik{'+
    														'position:fixed;'+
    														'height:100%;'+
    														'width:100%;'+
    														'z-index:999999;'+
    														'background:rgba(0,0,0,0.9);'+
    														'left:0;top:0;'+
    														'bottom:0;'+
    														'text-align:center;'+
    													'}'+
    													'.VAB_youtuBik iframe{'+
    														'margin-top:'+he/12.5+'px;'+
    													'}'+
    												'</style>'+
    												'<center>'+
    													'<iframe width="75%" height="'+he/1.25+'" src="'+$(this).attr('data-src')+'" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'+
    												'</center>';
    	CenterBlock.insertBefore(youtuBik,CenterBlock.children[0]);
    	$(document).on('click','.VAB_youtuBik',function(){
    		$('.VAB_youtuBik').fadeOut(function(){
    			$('.VAB_youtuBik').remove();
    		});
    		return false;
    	});
    });


    CenterBlock - это id div`а центрально блока(задайте любой свой)
  • Как на WP вставить видео с youtube, чтобы она загрузку страницы не убивала?

    Просто выводите в каких-либо тегах текст мол смотреть видео жирным шрифтом, а в дата атрибут ссылку кинте. Ну и по клику на тег забирайте дата ссылку и разверните ифрайм с затемнением контента....
  • Как ограничить число регистраций?

    Александр, кому как, признаюсь мало знаком с подобного рода плагинами... (если плагин функциональный, то пока его документацию изучишь или гайды посмотришь...) но посмотрел немного о плагине... не видел что-то о сигнатурах... да и в любом случае в конфиги сервера он не залезет... кроме того, если я верно понял, то он не предотвращает спам в комментах, а удаляет то, что считает спамом, что на мой взгляд не айс мягко говоря... как ни крути надо понимать, что ты делаешь и в любом случае вникать по полной... а то частенько ребята на хабр забегают по типу: ставим плагин супер кеширования и радуются, а через годик/другой приходят и паника... узнают, что год назад потерлась медиа библа и что теперь делать...¯\_(ツ)_/¯
  • Как ограничить число регистраций?

    Александр Торопов, wp-admin:
    используем add_filter('auth_redirect_scheme','stop_redirect',9999); //проверяем если пользователь не авторизован, отдаем, к примеру, 404 страницу при обращении на .../wp-admin или .../admin вместо редиректа на страницу авторизации


    для multisite можем использовать init для редиректов

    что-то похожее на

    if(is_multisite()&&!get_option('users_can_register')){add_action('init','функция');}



    add_filter('site_url','функция',10,3);//подменяем wp-login на свой. Аналогично с wp-comments-post
    
    add_filter('mod_rewrite_rules','функция'); //рулим через .htaccess Дефолтный wp-login, на свою кастомную после смыны. Дефолтный wp-login блочим тут же, либо через настройки веб сервера, например Nginx. Аналогично с wp-comments-post

    чтобы рулы вписались в .htaccess надо обновить(нажать на кнопку «Сохранить изменения») пост. ссылки

    627ddb2fe5113294967288.jpeg

    блочим так же любые обращения к wp-config.php, либо перемещаем файл на директорию выше... многое можно блочить в настройках сервера, если есть доступ ( не забываем тут и о fail2ban)

    например Nginx

    location ~ (xmlrpc|wp-comments-post|wp-config|wp-config-sample|wp-login)\.php$ {
    				error_page   404 /my_super_404.html;
    				return 404;
    }



    события и фильтры для авторизации и регистрации для постоения свое логики защиты, в том числе от брутфорса(перебора):

    add_action('register_form','функция',10,1);
    add_action('login_form','функция');
    add_action('login_enqueue_scripts','функция');
    add_filter('wp_authenticate_user','функция',10,2);
    add_filter('registration_errors','функция');
    add_filter('login_headerurl','функция');
    add_filter('login_headertext','функция');
    add_action('login_footer','функция');
    add_filter('login_redirect','функция');
    add_action('wp_logout','функция');


    комментарии

    add_action('comment_form','функция');
    add_action('pre_comment_on_post','функция',0);
    add_action('init','функция');


    остатки + тот минимум для скрытия сигнатур wp:
    add_filter('xmlrpc_enabled','__return_false');
    add_filter('the_generator','__return_empty_string');
    remove_action('wp_head','rsd_link');//Используется различными блог-клиентами или веб-сервисами для публикации/изменения записей в блоге.
    remove_action('wp_head','feed_links',2);
    remove_action('wp_head','feed_links_extra',3);
    // remove_action('wp_head','rel_canonical');//Убирает канонические линки
    remove_action('wp_head','wlwmanifest_link');// Используется блог-клиентами, а вернее лишь одним из них - Windows Live Writer. Не используете WLW - удаляйте.
    remove_action('wp_head','wp_resource_hints',2);//dns-prefetch
    remove_action('wp_head','wp_shortlink_wp_head');// Убирает короткую ссылку к текущей странице
    remove_action('wp_head','wp_oembed_add_discovery_links');//alternate - application/json+oembed и alternate - text/xml+oembed
    remove_action('wp_head','rest_output_link_wp_head',10,0);//alternate - application/json и rel api.w.org
    remove_action('template_redirect','rest_output_link_header',11,0);//че-то с рест апи


    кроме этого для скрытия сигнатур:
    при создании записей проверять галочку «Разрешить уведомления и обратные ссылки» в обсуждении (должна быть убрана)

    627dd517cfc5c171897437.jpeg

    в некоторых случаях сигнатуры паляться через заданое имя файла скрипта, поэтому может понадобиться подключить/переподключить свое. Например,
    если используется comment-reply - отключаем, но, если нужен, копипастим скрипт из файла в свой файл (возможно и свой jQuery)

    избавляемся от wp-content:

    wp-config.php

    $vab_prot=!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])?$_SERVER['HTTP_X_FORWARDED_PROTO']:'http';
    define('WP_CONTENT_FOLDERNAME','my-super-content');
    define('WP_CONTENT_DIR',ABSPATH . WP_CONTENT_FOLDERNAME) ;
    define('WP_SITEURL',$vab_prot.'://'.$_SERVER['HTTP_HOST'].'/');
    define('WP_CONTENT_URL',WP_SITEURL . WP_CONTENT_FOLDERNAME);



    не забываем, что, если пользуемся костылями, будут лишние заморочки. Например читаем комментарии в том числе. Надо будет и в базе пути поправить (Search-Replace-DB в помощь)

    бонусом

    поменять клыссы в теге body
    add_filter('body_class','функция');


    многие могут сказать, что скрытие сигнатур никакой защиты не дает, но почему на серверах убирают сигнатуры системы и прочего...даже избавление от папки wp-content уже повысит безопасность.

    з.ы. В интернете инфы валом... надо только проявить желание найти. И нюансов по этой теме очень много. возможно я что-то и упустил... в пару строк тут не уложиться. а если ещё и вукомерс подцепить... то и там, к примеру с сигнатурами потеть... не надо забывать, что все, что лежит в инете, лежит в свободном доступе (плагин или тема, сам движок), поэтому и лазейки появляются/меняются. Разрабы ВП дают возможность изменить структуру его движка, но тут надо понимать, что многий функционал, скорее всего, самому писать надо будет (но и цена будет - не пробиваемость)...