Как вывести все категории (рубрики) товаров woocommerce в wordpress?

Перевод постоянных ссылок

Для перевода URL не обойтись без стороннего плагина. Самый простой и самый популярный плагин для перевода постоянных ссылок это плагин: Cyr-And-Lat (устарел), Плагин достаточно старый, но работает без проблем. После установки без настроек, плагин все ссылки переведет автоматом. Более новый плагин WP Translitera (https://ru.wordpress.org/plugins/wp-translitera/)

Кроме описанных выше настроек постоянных ссылок, можно включить в URL  дату: пункты день и название (1 на фото), и месяц и название(2 на фото). Также можно добавить в URL порядковый номер: настройка Цифры(3 на фото).

www.wordpress-abc.ru

1) Стандартный Цикл и цикл на основе query_posts()

Я объединил 2 вида циклов (с  и начинающийся с  ), потому что технически они абсолютно одинаковые.

Давайте вспомним, как выглядит стандартный Цикл WordPress:

<?php
// проверяем есть ли посты в глобальном запросе - переменная $wp_query
if( have_posts() ){
	// перебираем все имеющиеся посты и выводим их
	while( have_posts() ){
		the_post();
		?>

		<div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
			<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
			<?php the_content(); ?>
		</div>

		<?php
	}
	?>

	<div class="navigation">
		<div class="next-posts"><?php next_posts_link(); ?></div>
		<div class="prev-posts"><?php previous_posts_link(); ?></div>
	</div>

	<?php
}
// постов нет
else {
	echo "<h2>Записей нет.</h2>";
}

Такой код мы можем встретить в файлах index.php, category.php и т.д. Эти файлы отвечают за вывод на странице списка записей. Этот цикл перебирает по очереди посты, которые выводятся на странице и во время перебора, используя Теги Шаблона (предназначенные для использования внутри Цикла), мы можем вывести различные данные поста (заголовок, текст, метаданные и т.д.).

Обратите внимание: в стандартном Цикле мы не указываем никаких данных для выборки записей, а сразу начинаем цикл с if( have_posts() ){ while( have_posts() ){… Это говорит о том, что данные уже существуют и их нужно просто обработать и вывести на экран. «Уже существующие» данные сохраняются в глобальную переменную $wp_query и для каждого типа страниц WordPress определяются автоматически, т.е

WordPress заранее делает запрос к БД, на основе того какой тип страницы сейчас отображается (категория, метка, статья, постоянная страница и т.д.) и результат запроса записывается в $wp_query, а затем от туда выводится в цикле. Интересно, что такой запрос делается функцией query_posts(), которую мы разберем ниже

«Уже существующие» данные сохраняются в глобальную переменную $wp_query и для каждого типа страниц WordPress определяются автоматически, т.е. WordPress заранее делает запрос к БД, на основе того какой тип страницы сейчас отображается (категория, метка, статья, постоянная страница и т.д.) и результат запроса записывается в $wp_query, а затем от туда выводится в цикле. Интересно, что такой запрос делается функцией query_posts(), которую мы разберем ниже.

Обычный Цикл WordPress используется для базовых страниц WP (категории, метки, архивы по дате).

wp/v2/categories/{id}

Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.

$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/categories/1
{
    "namespace": "wp/v2",
    "methods": ,
    "endpoints": ,
            "args": {
                "id": {
                    "required": false,
                    "description": "Уникальный идентификатор элемента.",
                    "type": "integer"
                },
                "context": {
                    "required": false,
                    "default": "view",
                    "enum": ,
                    "description": "Рамки в которых сделан запрос, определяют поля в ответе.",
                    "type": "string"
                }
            }
        },
        {
            "methods": ,
            "args": {
                "id": {
                    "required": false,
                    "description": "Уникальный идентификатор элемента.",
                    "type": "integer"
                },
                "description": {
                    "required": false,
                    "description": "HTML описание элемента.",
                    "type": "string"
                },
                "name": {
                    "required": false,
                    "description": "HTML название элемента.",
                    "type": "string"
                },
                "slug": {
                    "required": false,
                    "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.",
                    "type": "string"
                },
                "parent": {
                    "required": false,
                    "description": "ID элемента родителя.",
                    "type": "integer"
                },
                "meta": {
                    "required": false,
                    "description": "Мета поля.",
                    "type": "object"
                }
            }
        },
        {
            "methods": ,
            "args": {
                "id": {
                    "required": false,
                    "description": "Уникальный идентификатор элемента.",
                    "type": "integer"
                },
                "force": {
                    "required": false,
                    "default": false,
                    "description": "Должно быть истинно, так как элементы не поддерживают перемещение в корзину.",
                    "type": "boolean"
                }
            }
        }
    ],
    "schema": {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "category",
        "type": "object",
        "properties": {
            "id": {
                "description": "Уникальный идентификатор элемента.",
                "type": "integer",
                "context": ,
                "readonly": true
            },
            "count": {
                "description": "Число опубликованных записей элемента.",
                "type": "integer",
                "context": ,
                "readonly": true
            },
            "description": {
                "description": "HTML описание элемента.",
                "type": "string",
                "context": 
            },
            "link": {
                "description": "URL элемента.",
                "type": "string",
                "format": "uri",
                "context": ,
                "readonly": true
            },
            "name": {
                "description": "HTML название элемента.",
                "type": "string",
                "context": ,
                "required": true
            },
            "slug": {
                "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.",
                "type": "string",
                "context": 
            },
            "taxonomy": {
                "description": "Тип атрибуции элемента.",
                "type": "string",
                "enum": ,
                "context": ,
                "readonly": true
            },
            "parent": {
                "description": "ID элемента родителя.",
                "type": "integer",
                "context": 
            },
            "meta": {
                "description": "Мета поля.",
                "type": "object",
                "context": ,
                "properties": []
            }
        }
    }
}

Алгоритм схож с работой функции get_category().

GET /wp/v2/categories/{id}
id(число)
Идентификатор термина.
context(строка)
Область, в которой выполняется запрос; определяет поля, присутствующие в ответе.
Может быть: По умолчанию: view

Пример запроса

http://demo.wp-api.org/wp-json/wp/v2/categories/25

Алгоритм схож с работой функции wp_update_category()

POST /wp/v2/categories/{id}
id(обязательный)
ID термина (рубрики).
name
Название термина (рубрики).
description
Описание термина (рубрики).
slug
Слаг (ярлык) термина (рубрики), обычно создается из названия.
parent
ID родительского термина.
meta
Мета поля.

Пример запроса

$ curl -X POST http://demo.wp-api.org/wp-json/wp/v2/categories/25 -d '{"name":"Новое имя"}'

Или

POST http://wptest.ru/wp-json/wp/v2/categories/6?name=My rubrik&slug=My rubrik

Ответ

{
	"id": 6,
	"count": 0,
	"description": "",
	"link": "http://wptest.ru/cat/my-rubrik/",
	"name": "My rubrik",
	"slug": "my-rubrik",
	"taxonomy": "category",
	"parent": 0,
	"meta": [],
	"_links": {
		"self": [
			{
				"href": "http://wptest.ru/wp-json/wp/v2/categories/6"
			}
		],
		"collection": [
			{
				"href": "http://wptest.ru/wp-json/wp/v2/categories"
			}
		],
		"about": [
			{
				"href": "http://wptest.ru/wp-json/wp/v2/taxonomies/category"
			}
		],
		"wp:post_type": [
			{
				"href": "http://wptest.ru/wp-json/wp/v2/posts?categories=6"
			}
		],
		"curies": [
			{
				"name": "wp",
				"href": "https://api.w.org/{rel}",
				"templated": true
			}
		]
	}
}

Алгоритм схож с работой функции wp_delete_term()

Пример запроса

$ curl -X DELETE http://wptest.ru/wp-json/wp/v2/categories/6?force=true

Ответ

{
	"deleted": true,
	"previous": {
		"id": 6,
		"count": 0,
		"description": "",
		"link": "http://wptest.ru/cat/my-rubrik/",
		"name": "My rubrik",
		"slug": "my-rubrik",
		"taxonomy": "category",
		"parent": 0,
		"meta": []
	}
}

Ответ если такой рубрики нет

{
	"code": "rest_term_invalid",
	"message": "Элемент не существует.",
	"data": {
		"status": 404
	}
}

Редактирование кода шаблона

Если у вас, есть опыт работы с кодами и , то можно редактировать код темы напрямую.

Важно! Ручное изменение кода темы, делайте с заранее сделанной резервной копией сайта, на случай неудачи. Избежать этого поможет плагин Jetpack. Функционал Jetpack включает модуль независимого редактора CSS стилей шаблона

В этом редакторе вы можете вводить любые новые коды CSS шаблона, и они не будут «обнуляться» при обновлении шаблона. После активации этой функции Jetpack, в меню «Внешний вид» появляется строка «Редактировать CSS»

Избежать этого поможет плагин Jetpack. Функционал Jetpack включает модуль независимого редактора CSS стилей шаблона. В этом редакторе вы можете вводить любые новые коды CSS шаблона, и они не будут «обнуляться» при обновлении шаблона. После активации этой функции Jetpack, в меню «Внешний вид» появляется строка «Редактировать CSS».

Примечание: Перед добавлением своего кода проверяйте его на ошибки и, по возможности, сжимайте. Эти же операции не помешает сделать с рабочими файлами css тем.

Можно редактировать CSS сайта WordPress напрямую, на вкладке Внешний вид→Редактор→Таблицы CSS. Однако, повторюсь, это редактирование исчезнет после обновления шаблона. Чтобы этого не происходило, есть инструмент использования дочерней темы WordPress.

Цикл на основе query_posts()

позволяет изменить базовый запрос и вывести нужный нам вариант записей.

Вариант 1

Мы можем изменить базовый запрос (сделать еще один запрос и перезаписать данные предыдущего запроса) и, например, вырезать ненужные категории из вывода или изменить количество выводимых записей, порядок сортировки и т.д.

<?php
global $query_string; // параметры базового запроса
query_posts( $query_string .'&cat=-6,-9&order=ASC&posts_per_page=20' ); // базовый запрос + свои параметры 



wp_reset_query(); // сброс запроса
?>

В этом примере мы создали новый запрос к БД, в котором использовали параметры базового запроса + свои параметры: исключили категории 6 и 9 (), а также отсортировали записи по порядку () и вывели 20 записей на странице вместо, установленных в настройках 10 (). Полный список параметров, которыми можно сформировать нужный нам вывод, смотрите в описании функции query_posts().

Преимущества такого изменения в том, что если мы, например, изменим количество выводимых записей на странице с 10 (по умолчанию) на 20, то пагинация на странице автоматически подстроится под это изменение, потому что query_post() меняет данные глобальной переменной $wp_query, а пагинация строится именно на основе этих данных. Это лишь один из примеров, показывающий что query_posts() и поведение других функций на странице взаимосвязаны.

Изменять базовый запрос WP рекомендуется через фильтр pre_get_posts

Вариант 2

Можно не использовать параметры базового запроса ($query_string), а полностью переписать базовый запрос:

query_posts( 'cat=-6,-9&order=ASC' );

Однако, такой подход по сути сотрет базовый запрос и создаст новый, который может быть составлен неправильно, поэтому полностью переписывать базовый запрос нужно аккуратно, со знанием дела.

Необходимость

Сбрасывать измененный запрос при использовании нужно, потому что переписывает глобальную переменную $wp_query которая отвечает за некоторые свойства страницы. Давайте посмотрим на примере.

Предположим нам на странице категории 6 (ID категории), нужно вывести данные только поста 9 (ID поста):

<?php
query_posts('p=9');
if(have_posts()){ while(have_posts()){ the_post();
	the_title();
	the_content();
}}
else echo 'Записей нет';
?>

В этом примере мы не сбросили запрос и функция query_posts() переписала глобальную переменную $wp_query. Теперь, кода мы проверим какая это страница (а это страница категории: is_category() == true), мы увидим, что это уже совсем не страница категории, а страница поста: is_single() == true. Т.е. следующий код вернет нам «Это страница поста», хотя на самом деле это страница категории:

if( is_category() ) echo 'Это страница категории'; // не сработает
if( is_single() ) echo 'Это страница поста'; // сработает

Ошибочка, которая может в последствии создать немало головной боли.

Когда использовать query_posts()?

Когда нужно немного изменить основной (базовый) запрос WordPress. В идеале: для исключения рубрики/метки (например, на главной странице); изменение направления сортировки; ограничения количества выводимых постов; исключения определенных постов из категории/метки и т.п.

Не нужно использовать query_posts() для создания нескольких циклов на одной странице, для вывода в сайдбар списка постов, для создания дополнительного вывода записей и т.п., для этих целей используйте циклы на основе get_posts(). К тому же, обе функции понимают параметры одинаково! Так зачем «платить» больше?..

Что такое теги шаблона WordPress

Теги шаблона WordPress  используются для создания динамических страниц блога. Почему динамические? Потому что тег это не статический код, а инструкция, сделать то-то и то-то при таком то  условии. По сути, любой тег шаблона — это код, который поручает WordPress «сделать» что-либо или что-нибудь «получить».

В WordPress есть определенный набор пользовательских тегов. Тег WordPress нельзя придумать самому. Можно только написать определенный код (инструкцию) в котором будут использоваться теги из списка тегов WordPress.

Теги шаблона WordPress можно отсортировать по функциям, для выполнения которых они предназначены. Определенный Тег, прописанный в шаблоне, «дает» WordPress определенную задачу, для которой этот тег и создан. Различные справочные материалы по-разному сортируют теги WordPress. Но от их сортировки их назначение не меняется.

Например, тег: , предназначен для вывода на экран информации о блоге, которую вы прописываете в настройках. Что этот тег, помещенный в шаблон, и сделает, если его заключить в теги PHP:

По сути, это инструкция WordPress, показать на экране определенную информацию (show) о блоге. Определяется эта информация набором параметров для этого тега .

Таких тегов шаблона WordPress очень много, посмотреть их все можно ТУТ. Очень хороший обзор функций WP ТУТ. Здесь же, я «пролистаю» основные теги шаблона WordPress для общей информации.

Как поменять тему WordPress сайта

Тема WordPress сайта, как и плагин WordPress, не нарушает код ядра системы. Любая тема может быть, как удалена, так и добавлена на блог, без нарушения кода ядра. Сменить тему блога очень просто и сделать это можно двумя способами.

  1. Скачать тему «на стороне» и установить её через консоль;
  2. Найти нужную тему через консоль и сразу установить ее.

Вариант 1

  • Ищем тему в Интернет и скачиваем ее в виде архива;
  • Входим в консоль на вкладку Внешний вид→Темы→Добавить новую и жмем «Загрузить тему»;
  • Далее выбираем скачанный архив темы и устанавливаем её;
  • После настроек, тему можно активировать.

Вариант 2

  • Опять таки, входим на вкладку Внешний вид→Темы→Добавить новую;
  • В поле поиска вписываем искомую тему ( если знаем ее название) или выбираем тему по фильтру;

Далее просматриваем тему и если нравится тема, после настроек активируем её.

Важно понимать, что смена темы уберет все ваши виджеты и для новой темы. Их нужно установить заново

Поэтому, чтобы созданные виджеты не пропали перед сменой темы, перенесите виджеты в поле «Неиспользуемые виджеты». После смены темы вы легко восстановите виджеты в новых сайдбарах новой темы.

На блог можно установить несколько тем. Все они «лягут» в папку /wp-content/templates, но работать будет только тема, которую вы активируете.

Оптимизация рубрик/категорий WordPress

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

Оптимизировать мы будем при помощи плагина , который установили в прошлом уроке. После того, как Вы создали необходимые вам рубрики, наведите на неё и у вас появиться пункт «Изменить»:

Если Вы считаете, что вам не нужен дополнительный трафик, тогда закройте станицу от индексации. Сделать это можно в самом низу страницы, раздел «Дополнительно» и где «Разрешить поисковым системам показывать Рубрика в результатах поиска?» нажмите нет.

Если Вы решили оптимизировать, значит Вы приняли правильное решение. Раздел «Изменить рубрику» нас не интересует, прокрутите страницу к разделу Yoast SEO. Первый пункт «Фокусное ключевое слово» можно не трогать и перейдите сразу к разделу «Изменить сниппет»:

Сниппет должен включать в себя поисковую фразу (запрос который ввел пользователь в поиск), при этом должен быть манящим

Важно – в сниппете информация строго должна соответствовать тому, что пользователь уведет на странице

Надеюсь всем понятно, поэтому давайте перейдем к заполнению:

SEO заголовок – первые 3-4 слова должны быть популярным поисковым запросом, а подобрать такие можно тут — https://wordstat.yandex.ru/

Лично я уже много лет не смотрю статистику запросов, а подбираю слова следующим образом: начинаю писать поисковую фразу в Яндексе, и то, что он мне предложит дописать, это и есть популярный запрос. Пример такого запроса в нашем случае – пишем «Рецепт напитков»:

Для рубрики сайта мне понравился запрос «Рецепты напитков в домашних условиях». Его и будем использовать для нашего SEO заголовка:

Как видите, Yoast SEO подсказывает нам, что заголовок маленький. Не стоит в него вставлять много ключей, а просто допишите пару слов от себя, но так, чтоб он был привлекательным и манил посетителей:

Теперь Yoast SEO подсвечивает зеленым, а это значит, что длина заголовка такая, как должна быть. Давайте перейдём к описанию:

Мета-описание обязательно должно включать в себя в себя ключ (тот самый запрос, который мы подобрали «Рецепт напитков в домашних условиях»). Этот ключ можно разбить и склонять. Вот пример описания написанного мною:

Теперь объясняю: жирным я выделил ключ, по которому мы продвигаем страницу и хотим видеть её в результате поисковой выдачи. Весь остальной текст написан от себя, но так, чтоб это привлекало посетителей на сайт.

После того, как Вы заполнили заголовок и описание не забываем нажать «Обновить» в самом низу страницы.

На SEO анализ от Yoast SEO не обращаем внимания:

Для рубрики этого вполне достаточно. Можно конечно сделать ещё описание на 1000 символов в верху страницы, но это уже глубокое SEO и в рамках курса для новичков это не уместить. Возможно к этому мы придём в дальнейшем, но как показывает практика – описание рубрики это лишнее!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *