• WP Super Cache не работает на nginx?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Правильно настройте Ngnix, и WP Super Cache не лучшее решение.
    Ответ написан
    9 комментариев
  • Как вывести свое кастомное поле в админке под полем ввода заголовка?

    $meta_boxes[] = array(
        'id' => THEME_SLUG . '_page_settings',
        'title' => __( 'Page Settings', THEME_SLUG ),
        'pages' => array( 'page' ),
        'context' => 'normal',
        'priority' => 'high',
        'autosave' => true,
    
     <blockquote>   'fields' => array(
            // Subtitle
            array(
                'name'  => 'Subtitle:',
                'id'    => THEME_SLUG . "_subtitle",
                'type'  => 'hidden'</blockquote>
            ),

    и код полностью
    <?php
    global $wp_registered_sidebars;
    $layout = isset($this->data['page_sidebar_position']) ? $this->data['page_sidebar_position'] : 'no';
    $sidebars_list = array();
    foreach ($wp_registered_sidebars as $sidebar => $attrs) {
        $sidebars_list[$attrs['id']] = $attrs['name'];
    }
    
    $port_cats_array = array('none' => __('Default (All Categories)', THEME_SLUG));
    $port_cats = get_terms( THEME_SLUG . '_portfolio_category', 'orderby=name&order=ASC&hide_empty=1' );
    foreach ($port_cats as $key => $value) {
        $port_cats_array[$value->term_id] = $value->name;
    }
    
    // PAGE
    $meta_boxes[] = array(
        'id' => THEME_SLUG . '_page_settings',
        'title' => __( 'Page Settings', THEME_SLUG ),
        'pages' => array( 'page' ),
        'context' => 'normal',
        'priority' => 'high',
        'autosave' => true,
    
        'fields' => array(
            // Subtitle
            array(
                'name'  => 'Subtitle:',
                'id'    => THEME_SLUG . "_subtitle",
                'type'  => 'hidden'
            ),
    
            // Category for portfolio page
            array(
                'name'    =>  __( 'Portfolio Category:', THEME_SLUG ),
                'id'      =>  THEME_SLUG . "_page_portfolio_cat",
                'type'    =>  'select',
                'desc'    =>  __( 'Select category for this page. This category <b>should be</b> a parent category.', THEME_SLUG ),
                'options' =>  $port_cats_array,
                'std'     =>  'none',
            ),
    
            // // Header Background
            // array(
            //     'name' => __('Header background:', THEME_SLUG),
            //     'id'               => THEME_SLUG . "_page_header_bg",
            //     'type'             => 'image_advanced',
            //     'max_file_uploads' => 1,
            //     'desc'  => __( 'Select image from media library.', THEME_SLUG ),
            // ),
    
            // // Advanced Background Settings
            // array(
            //     'name' => __('Advanced background settings:', THEME_SLUG),
            //     'id'               => THEME_SLUG . "_page_header_advanced",
            //     'type'             => 'checkbox',
            //     'std'              => 0,
            //     'desc'  => __( 'It works <b>ONLY</b> if you choose a header background image above.', THEME_SLUG ),
            // ),
    
    // DIVIDER
    // array(
    //     'type' => 'divider',
    //     'id'   => THEME_SLUG . "_page_divider_id1", // Not used, but needed
    // ),
    //         // Header Background Color
    //         array(
    //             'name' => __('Page header background:', THEME_SLUG),
    //             'id'               => THEME_SLUG . "_page_header_bgcol",
    //             'type'             => 'color',
    //             'std'              => '#000'
    //             // 'desc'  => __( 'Select image from media library.', THEME_SLUG ),
    //         ),
    
    //         // Background opacity
    //         array(
    //             'name' => __( 'Background opacity:', THEME_SLUG ),
    //             'id'   => THEME_SLUG . "_page_header_bgcol_opacity",
    //             'type' => 'slider',
    //             'suffix' => ' %',
    //             'std' => 0.40,
    //             // jQuery UI slider options. See here http://api.jqueryui.com/slider/
    //             'js_options' => array(
    //                 'min'   => 0.01,
    //                 'max'   => 1,
    //                 'step'  => 0.01,
    //             ),
    //         ),
    
    //         // Title Color
    //         array(
    //             'name' => __('Page title color:', THEME_SLUG),
    //             'id'               => THEME_SLUG . "_page_title_col",
    //             'type'             => 'color',
    //             'std'              => '#FFF'
    //         ),
    
            // Subitle Color
            // array(
            //     'name' => __('Subtitle color:', THEME_SLUG),
            //     'id'               => THEME_SLUG . "_page_subtitle_col",
            //     'type'             => 'color',
            // ),
    
    // array(
    //     'type' => 'divider',
    //     'id'   => THEME_SLUG . "_page_divider_id2", // Not used, but needed
    // ),
    
            // Breadcrumbs
            array(
                'name'    => __( 'Breadcrumbs:', THEME_SLUG ),
                'id'   => THEME_SLUG . "_page_breadcrumbs",
                'type'    => 'select',
                'desc'  => __( 'By default page used general theme settings, defined on '.THEME_NAME.' Options page.', THEME_SLUG ),
                'options' => array(
                    '-1' => __( 'Default', THEME_SLUG ),
                    '1' => __( 'Show', THEME_SLUG ),
                    '0' => __( 'Hide', THEME_SLUG ),
                ),
                'std'  => '-1',
            )
    
        )
    );
    
    $meta_boxes[] = array(
        'id' => THEME_SLUG . '_page_layout',
        'title' => __( 'Page Layout', THEME_SLUG ),
        'pages' => array( 'page' ),
        'context' => 'side',
        'priority' => 'low',
        'autosave' => true,
    
        'fields' => array(
            // Layout
            array(
                'id'       => THEME_SLUG . '_page_layout',
                'type'     => 'image_select',
                'options'  => array(
                    'right' => THEME_URI . '/core/options/redux-framework/ReduxCore/assets/img/2cr.png',
                    'no'  => THEME_URI . '/core/options/redux-framework/ReduxCore/assets/img/1col.png',
                    'left'  => THEME_URI . '/core/options/redux-framework/ReduxCore/assets/img/2cl.png',
                ),
                'std' => $layout
            ),
            // Sidebars
                array(
                    'name'  => null,
                    'id'    => THEME_SLUG . "_page_widgets_area",
                    'desc'  => __( 'Select widgets area for this page.', THEME_SLUG ),
                    'type'  => 'select_advanced',
                    'multiple'    => false,
                    'options'  => $sidebars_list,
                    'placeholder' => __( 'Select Widgets Area', THEME_SLUG )
                )
        )
    );
    Ответ написан
    1 комментарий
  • Как вставить произвольный код для отдельной страницы в WordPress?

    zorca
    @zorca Куратор тега WordPress
    Просто сделайте кастомный шаблон страницы
    Ответ написан
    Комментировать
  • Upwork заблокировали аккаунт, что делать?

    vicodin
    @vicodin
    Имею некоторый опыт
    Если есть диплом близкий к специальности, выдающийся профиль на linkedin, сертификаты близкие по специальности - отправляйте все в тех.поддержку с просьбой дать второй шанс и никогда больше не отправляйте пропосалы копипастом.

    Если ничего такого нет и объективно бан - справедливый - подкачайте скиллы и найдите себе другую площадку, Upwork популярен, но на нём мир клином не сошелся. Начать поиски можно тут - https://github.com/lukasz-madon/awesome-remote-job...

    Успехов!
    Ответ написан
    3 комментария
  • WordPress. Как с помощью wp_enqueue_script() подключить скрипт Bootstrap 4 с атрибутом integrity?

    irtek
    @irtek
    Wordpress-addicted
    Есть хук для строковой замены выводимой строки подключения скрипта.
    Вот такой код для functions.php
    function add_integrity_attribute($tag, $script_handle) {
    // Если подключаемый скрипт не бутстрап, то возвращаем как обычно
        if ( $script_handle !== "bootstrap" ) {
            return $tag;
    } else {
    // Если бутстрап, то заменяем в строке <script .... "src на src с нашим атрибутом
        return str_replace( ' src', ' integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" src', $tag );
    }
    }
    add_filter('script_loader_tag', 'add_integrity_attribute', 10, 2);


    Скрипт нужно подключать с handle = bootstrpap, т.е.
    wp_enquee_script('bootstrap', ..... ); Или измените на любой другой, только не забудьте изменить в функции подстановки атрибута.
    Ответ написан
    1 комментарий
  • Можно ли отключить jq от определённой страницы в wordpress?

    irtek
    @irtek
    Wordpress-addicted
    У вас чья-то готовая тема? Смотря как подключен jquery.
    Есть функции, которые отключают регистрацию скрипта jquery в Wordpress

    Эти функции отменят регистрацию скрипта jquery (функции вставляются в файл functions.php темы)
    wp_deregister_script( 'jquery' );
    wp_deregister_script( 'jquery-core' );


    Есть функция, которая регистрирует скрипт jquery в Wordpress (НО НЕ ПОДКЛЮЧАЕТ). также вставляется в functions.php
    wp_register_script('jquery', 'URL скрипта', false, null, true );


    И есть функция, которая ПОДКЛЮЧАЕТ скрипт
    wp_enqueue_script('jquery', 'URL скрипта', false, null, true );


    Таким образом вы можете, во первых функциями deregister отменить текущее подключение и скрипт jquery, командой wp_register_script зарегистрировать скрипт, а затем подключать где нужно простой командой
    wp_enqueue_script('jquery'); там где нужно.

    1. Вы можете подключить скрипт на нужной странице добавив
    wp_enqueue_script('jquery');  // если ранее jquery был зарегистрирован или напрямую функцией
    wp_enqueue_script('jquery', 'URL скрипта', false, null, true );

    Функции вставлять ДО в шапке get_header();

    Вы также можете настроить подключение в functions.php конструкцией ниже. Обращаю внимание, что команда определения страницы is_page() не работает в functions php, поэтому можно добавить через функцию, повесив ее на хук. В рамках этой функции будет работать условная команда определения на какой странице включать jquery, а на какой нет.

    add_action('wp_enqueue_scripts', 'toster_q_479898', 99);
    function toster_q_479898() {
    if(is_page('about') {
    	wp_enqueue_script('jquery', 'URL скрипта', false, null, true );
    }
    }
    Ответ написан
    Комментировать
  • Можно ли в своём портфолио указать работы сделанные по заказу веб-студии?

    vicodin
    @vicodin
    Имею некоторый опыт
    Ну если работа полностью сделана вами, и НДА вы не подписывали, то почему бы и нет, это же просто демонстрация вашего уровня работы.
    Еще лучше просто указать - работал в такой-то студии с такого-то по такой-то год, принимал участие в разработке таких-то сайтов, делал то-то и то-то
    Ответ написан
    2 комментария
  • Скажите надо ли что то делать с этими файлами в плане SEO?

    @archelon
    Закройте их в robots.txt
    Ответ написан
    Комментировать
  • Как связать Atom и Bitbucket?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    есть плагин для atom - git-plus https://atom.io/packages/git-plus
    Ответ написан
    Комментировать
  • Какие знания необходимы для написания ОС?

    Jump
    @Jump
    Системный администратор со стажем.
    В дополнение к озвученному необходимо -
    • Четкое понимание принципов работы компьютера.
    • Понимание - что такое ОС и для чего она нужна, и какие они вообще бывают.
    • Понимание - какую именно ОС и для чего вы хотите написать.
    • Понимание основных принципов работы современных ОС.
    Ответ написан
    Комментировать
  • Как реализация вкладки на сайте?

    Тут скорее не вкладки, а фильтрация контента.
    В вашем примере реализована она на серверной стороне - при клике делается ajax-запрос и заменяться контент.
    Тут базовый алгоритм простой - отслеживаем через JS клик по "вкладке", делаем нужный ajax-запрос на сервер, потом заменяем старый контент на полученный в ответе на запрос. Ну и обвешиваем доп. плюшками, типа подсветки активного пункта меню (вкладки), спиннеры при загрузке и прочее.

    Небольшие списки контента можно фильтровать и на клиентской стороне, есть разные js-плагины, к примеру вот:
    https://www.kunkalabs.com/mixitup/
    Ответ написан
    1 комментарий
  • Как записать путь до темы в WP?

    @kayart
    Для вывода ссылок на какие-то изображения лучше воспользоваться функцией wp_get_attachment_image_src( $attachment_id )

    Более подробно про неё можно прочитать на Kama

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

    Если же для вас важно обращаться напрямую к директории темы, то предлагаю воспользоваться функцией get_template_directory(), которая получает полный путь к папке вашей активной темы. Как всегда, более подробно о ней можно почитать на Kama
    Ответ написан
    Комментировать
  • Что по вашему опыту должен знать js программист уровня middle?

    Maksclub
    @Maksclub Куратор тега Карьера в IT
    maksfedorov.ru
    Как оценивают — известно шуту гороховому...

    Знать должен то же, что и сеньор — разница, что последний натаскивает команду или разрабатывает уже саму технологию, а не на технологии (но это мое суждение).

    Если по рынку — смотрел множество вакансий. Middle — полноценное ядро, специалист, в совершенстве знающий свой инструмент, свободно работающий с окружающим основной стек софтом... Должен знать множество тонкостей. Обычно это 2-4 года опыта, за это время достаточно крепко знает всю ширину языка. Должен хорошо знать работу браузера, если касательно js. За плечами несколько сложных проектов. Как правило должен с легкостью видеть плюсы и минусы разных фреймов ( в том числе не совсем модных, например ExtJS)
    Ответ написан
    1 комментарий
  • Что за предупреждение вылазит в админке wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Эти константы должны содержать корректный URL, а не /. Не изобретайте странные велосипеды. Данные константы используются для генерации полных абсолютных URL с корректными путями.
    Ответ написан
  • Есть ли какие то аналоги speedtest для своего сайта в сети, где нет интернета?

    @cssman
    самое простое - собрать простой костыльный скрипт на основе iperf.
    Ответ написан
  • Куда выкладывать портфолио с примерами верстки для работодателей?

    Astrohas
    @Astrohas
    Python/Django Developer
    Github Pages
    Ответ написан
    Комментировать
  • Как сделать AJAX запрос безопасным?

    @cluberr
    Защита: используем nonce и проверяем права

    Нет острой необходимости проверять AJAX запрос, если он потенциально не опасный. Например, когда он просто получает какие-то данные. Но когда запрос удаляет или обновляет данные, то его просто необходимо дополнительно защитить с помощью nonce кода и проверкой прав доступа.

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

    Существует два вида защиты, которые нужно использовать в AJAX запросах в большинстве случаев.

    1. Код nonce (случайный код)

    Nonce - это уникальная строка, которая создается и используется один раз - одноразовое число. Nonce проверка используется, когда нужно убедится, что запрос был послан с указанного «места».

    В WordPress есть функции wp_create_nonce() и check_ajax_referer() - это базовые функции для создания и последующей проверки nonce кода. С их помощью мы и будем создавать защиту nonce для AJAX запросов.

    Для начала создадим nonce код:

    add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
    function myajax_data(){
    
    	wp_localize_script('twentyfifteen-script', 'myajax', 
    		array(
    			'url' => admin_url('admin-ajax.php'),
    			'nonce' => wp_create_nonce('myajax-nonce')
    		)
    	);  
    
    }

    twentyfifteen-script это название основного скрипта темы (см. выше), который подключается на сайте с помощью wp_enqueue_script().

    Затем, в AJAX запросе добавим переменную с кодом nonce:

    var ajaxdata = {
    	action     : 'myajax-submit',
    	nonce_code : myajax.nonce
    };
    jQuery.post( myajax.url, ajaxdata, function( response ) {
    	alert( response );
    });

    Теперь, в обработке заброса необходимо проверить nonce код:

    add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
    add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );
    function myajax_submit(){
    	// проверяем nonce код, если проверка не пройдена прерываем обработку
    	check_ajax_referer( 'myajax-nonce', 'nonce_code' );
    	// или так
    	if( ! wp_verify_nonce( $_POST['nonce_code'], 'myajax-nonce' ) ) die( 'Stop!');
    
    	// обрабатываем данные и возвращаем
    	echo 'Возвращаемые данные';
    
    	// не забываем завершать PHP
    	wp_die();
    }

    check_ajax_referer()работает на основе функции wp_verify_nonce() и по сути является её оберткой для AJAX запросов.
    Обратите внимание, что в данном случае Nonce код создается в HTML коде. А это значит, если у вас установлен плагин страничного кэширования, то этот код может и наверняка будет устаревать к моменту очередного AJAX запроса.
    2. Проверка прав доступа

    Тут AJAX запросы будут срабатывать только для пользователей с правом author. Для всех остальных включая неавторизованных пользователей, AJAX запрос вернет ошибку.

    Особенность тут в том, что не авторизованные пользователи тоже должны видеть сообщение об ошибке при AJAX запросе. Для этого нужно обрабатывать запрос для них возвратом ошибки:

    add_action( 'wp_ajax_nopriv_myajax-submit', 'myajax_submit' );
    add_action( 'wp_ajax_myajax-submit', 'myajax_submit' );
    function myajax_submit(){
    	// проверяем nonce код, если проверка не пройдена прерываем обработку
    	check_ajax_referer( 'myajax-nonce', 'nonce_code' );
    
    	// текущий пользователь имеет права автора или выше
    	if( ! current_user_can('publish_posts') )
    		die('Этот запрос доступен пользователям с правом автора или выше.')
    
    	// Делаем что нужно и выводим данные на экран, чтобы вернуть их скрипту
    
    	// Не забываем выходить
    	wp_die();
    }
    Ответ написан
    2 комментария
  • Как придать нормальный вид разметке меню, которое выдаёт wordpress?

    zorca
    @zorca Куратор тега WordPress
    Вам нужно переписать вывод менюшки через Walker. Берите готовый пример: https://github.com/roikles/Wordpress-Bem-Menu и переделывайте по себя.
    Ответ написан
    Комментировать