И так — делал я один проект, на котором нужно было разместить много товаров, но корзина при этом была не нужна, т.е. нужно было оформить категории товаров так, чтобы ещё до захода в товарную карточку были видны все характеристика товара. И я это решил сделать вот так:
color — это цвет
fasad — материал фасадов
size — размер
и т.д. всего около 10 характеристик
И стояла большая проблема, а именно — нужно было в отрывок каждой записи под каждый товар забивать свой HTML где указывать размер, фасад, цену и т.д. и это было во первых очень неудобная и долгая работа (товаров свыше 400) и в случае если меняется цена нужно будет всё перебивать, а так как цена у меня выводится тоже сниппетами, где считается по формуле так это вообще двойная и бессмысленная работа — вбивать цену которая и так подсчиталась.
И я решил — нужно сделать вывод сниппетов в отрывок записи. И если для самой записи это делается несложно, то в отрывках записи сниппеты по просту не работали. Одна причина заключалась в том, что WordPress в отрывках записи режет все ненужные по его мнению теги, т.е. чистит код. Вторая причина — те сниппеты которые работают в самой записи не работают в отрывках, скорее всего это связано с некорректной обработкой get_the_ID() в отрывках записи именно при выводе категории.
add_shortcode( 'currentsize', 'sizid' ); function sizid( $atts ){ $atts = shortcode_atts( array( 'sizid' => 'Индивидуально', ), $atts, 'currentsize' ); return get_post_meta($atts['sizid'], 'size', 1); }А сам шорткод в этом случае выглядит так [currentsize sizid=3063] где 3063 это id записи. В самой же записи информация о размере хранится в записи size
add_shortcode( 'currentfasad', 'fasid' ); function fasid( $atts ){ $atts = shortcode_atts( array( 'fasid' => 'Индивидуально', ), $atts, 'currentfasad' ); return get_post_meta($atts['fasid'], 'fasad', 1); }А сам шорткод в этом случае выглядит так [currentfasad fasid=3063]. В самой же записи информация о фасаде хранится в записи fasad
add_shortcode('metr_mdf', function() { return number_format_i18n( get_post_meta(1, 'metr_mdf', 1), 0 ); });Данный шорткод выводит отформатированное число (стоимость). Содержимое произвольного поля metr_mdf из записи с id=1. number_format_i18n форматирует число, 0 знаков после запятой, если хотите чтобы было со знаками после запятой измените 0 к примеру на 2 (будет с копейками)
И это отлично сработало в записи типа Page, т.е. я взял, сделал главную страницу, разместил в ней вывод записей Posts, задал рубрику из которой брать записи и оно всё отлично выводится.
Я довольный результатом, решил таким же образом сделать шаблон категорий и разместить в нём Archive Posts, но тут меня ждала неудача — по аналогии оно не сработало, т.е. содержимое сниппетов не выводилось, выводились сами названия сниппетов, типа [currentfasad fasid=3063] и это меня наводило на мысль что сниппеты почему то не отрабатываются. Бился я над проблемой весь вечер и до поздней ночи, так не нашёл решение и решил — деваться не куда, наделаю для каждой категории записей типа Page (там же у меня всё получилось), размещу там вывод записей Posts, задам каждой нужную рубрику. От шаблона категорий пришлось отказаться, на всякий случай написал о своей проблеме в форум по WordPress’у и утром пришел ответ.
add_filter('the_excerpt', 'do_shortcode');Данную запись вставляем в файл function.php вашей темы и всё работает.
Искренне не понимаю почему же это тогда работало на страницах и не работало в категориях ? Я же разрешил все теги — по всей видимости этого было мало.
Ну в общем вот и всё, время 1:12 ночи, пойду я пожалуй спать. Надеюсь это кому то помогло.