Ответы пользователя по тегу WordPress
  • Какой есть плагин на WP для бронирования номеров?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Только самому писать, уж слишком много пожеланий по работе плагина.
    Ответ написан
    Комментировать
  • Как хранить файлы в uploads на отдельном облачном хранилище?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Ну, так, чтобы совсем не сохранялось - не уверен, что получится.
    https://wordpress.org/plugins/amazon-s3-and-cloudfront/ - по-идее, этот плагин должен уметь подобное, но я не тестировал.

    На самом деле если заменить apache2 на nginx, правильно его настроить, а в теме настроить вывод изображений нужными размерами (а не "сжимать" через css), то врядли вы заметите нагрузку на WP в сравнении с удалённым хостингом.

    Если проект действительно большой, изображений и пользователей очень много, то я бы смотрел в сторону не VPS, а VDS. На одном сервере живет сайт, второй отдаёт всю статику, а папка uploads подключается симлинком. Но и это немного не то, так как не решается проблем - повысить производительность не сделав upgrade сервера.

    Рекомендую всё-таки настроить nginx & php5-fpm для корректной работы с wordpress.
    А вообще идея интересная, если не найдется ничего подобного, возможно, как-то сяду напишу в свободное время - должно взлететь:)
    Ответ написан
    2 комментария
  • LEMP на DigitalOcean с Wordpress, блэк-джеком и мультисайтами?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Вот: https://rtcamp.com/easyengine/
    Всё просто до неприличности. Надежная и функциональная система. Минус - ставится только на Debian 6/7 и Ubuntu 12.04/14.04, хотя при желании можно переделать скрипт установщика.
    Ответ написан
    22 комментария
  • Как сделать кастомное меню в Wordpress?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Как вариант, можно просто зная ID меню получить массив ссылок, а потом уже делать с ним всё, что понадобится. Например: (взято из реального проэкта - ID 'top', прохожусь по всем пунктам два раза. Первый - ищу элементы первого уровня, второй - второго. Но это в случае, если мы знаем наверняка, что будет только два уровня меню. Если из много, нужно использовать рекурсию).

    function render_top_menu() {
    
    	$locations  = get_nav_menu_locations();
    	$menu       = wp_get_nav_menu_object( $locations['top'] );
    	$menu_items = wp_get_nav_menu_items( $menu->term_id );
    
    	$display_menu = array();
    
    
    	foreach ( $menu_items as $menu_item ) {
    		if ( $menu_item->menu_item_parent == 0 ) {
    			$display_menu[ $menu_item->ID ] = array(
    				'title' => get_the_title( $menu_item->object_id ),
    				'url'   => get_permalink( $menu_item->object_id )
    			);
    		}
    	}
    
    
    	foreach ( $menu_items as $menu_item ) {
    		if ( $menu_item->menu_item_parent !== '0' ) {
    			$display_menu[ $menu_item->menu_item_parent]['child'][] = array(
    				'title' => get_the_title( $menu_item->object_id ),
    				'url'   => get_permalink( $menu_item->object_id )
    			);
    		}
    	}
    
    	echo '<div class="header-menu">';
    
    	foreach ( $display_menu as $display_menu_item ) {
    		echo '<div class="header-menu-item"><a href="' . $display_menu_item['url'] . '"class="header-menu-link"><span>' . $display_menu_item['title'] . '</span></a>';
    
    		if ( is_array( $display_menu_item['child'] ) ) {
    			echo '<div class="header-menu-drop"><div class="header-menu-drop-items">';
    			foreach ( $display_menu_item['child'] as $submenu ) {
    				echo '<a href="' . $submenu["url"] . '" class="header-menu-drop-item">' . $submenu["title"] . '</a>';
    			}
    			echo '</div></div>';
    		}
    
    		echo '</div>';
    	}
    
    	echo '</div>';
    
    }
    Ответ написан
    Комментировать
  • Wordpress - страница 404 - если поле поиска пустое?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Как-то так:
    function search_filter($query) {
      if ( !is_admin() && $query->is_main_query() ) {
        if ($query->is_search) {
          global $wp_query;
         // здесь добавить проверку на пустой аргумент поиска.
        // сейчас не вспомню как он точно выводится, где-то в $query должен быть
          $wp_query->set_404();
          status_header(404);
        }
      }
    }
    
    add_action('pre_get_posts','search_filter');
    Ответ написан
    Комментировать
  • Куда ложить.po и.mo файлы русификации в Wordpress?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    codex.wordpress.org/Function_Reference/load_textdomain
    <?php load_textdomain( 'theme_name', TEMPLATEPATH . '/path/to/mofile/ru_RU.mo' ); ?>

    Этой функцией вы явно задаёте какой именно файл тема будет подгружать в качестве перевода. Файл lang.mo должен быть предварительно сгенерирован из файла *.po, который в свою очередь создаётся в программе poedit или аналогичной.

    /wp-content/languages/themes/ - это стандартные файлы. В принципе, можна и свои туда подгружать, но это неудобно - нужно отдельно установить тему, а потом отдельно зугразить файлы перевода. Поэтому все разработчики в свои темы включают сразу файлы перевода и подгружают через load_textdomain, после чего сами переводы в теме доступны с помощью функций:
    _e('textdomain', 'translate_string') - отдаём сразу на вывод
    $my_string = __('textdomain', 'translate_string') - записываем перевод в переменную
    Ответ написан
    Комментировать
  • Как сменить адрес сайта в настройках после переноса на другой домен?

    ykushnir
    @ykushnir
    Профессиональный Wordpress разработчик.
    Ответы выше правильные, но не совсем. Дело в том, что Wordpress и некоторые плагины хранят некоторые настройки в виде сериализованого массива в БД. После смены адреса сайта эти массивы могут оказаться "битыми". Поэтому рекомендую использовать плагин duplicator

    Ставите на локалку плагин, создаёте архив и файл инсталятора, загружаете в корень сайта, переходите по newsite.com/installer.php и следуете инструкциям.
    Ответ написан
    Комментировать