Почему может не работать тег more при отображении поля с редактором TinyMCE?
Тема самописная на underscore, без билдеров, плагинов мало.
Гутенберг отключен для всего, кроме виджетов, так что это классик-редактор.
В теме добавлено поле для категорий товара как "нижнее описание" - с редактором TinyMCE.
add_action( 'product_cat_add_form_fields', 'cxc_taxonomy_add_new_meta_field', 10, 2 ); function cxc_taxonomy_add_new_meta_field() { // this will add the custom meta field to the add new term page ?> <div class="form-field"> <label for="custom_term_meta"><b>Bottom category description</b></label> <?php $term_id = $term->term_id; wp_editor(get_term_meta( $term_id, 'custom_term_meta', true ), 'custom_term_meta', array( 'wpautop' => 1, 'media_buttons' => 1, 'textarea_name' => 'custom_term_meta', 'textarea_rows' => 5, 'tabindex' => null, 'editor_css' => '<style>.quicktags-toolbar, .wp-editor-tools, .wp-editor-wrap, .wp-switch-editor {padding: 5px 10px;}</style>', 'editor_class' => 'form-field tinyeditor', 'teeny' => 0, 'dfw' => 0, 'tinymce' => 1, 'quicktags' => 1, 'drag_drop_upload' => false ) );?> <p class="description">Bottom category description</p> </div> <?php } add_action( 'product_cat_edit_form_fields', 'cxc_taxonomy_edit_meta_field', 10, 2 ); function cxc_taxonomy_edit_meta_field( $term ) { // put the term ID into a variable $term_id = $term->term_id; // retrieve the existing value(s) for this meta field. This returns an array $term_meta = get_term_meta( $term_id, 'custom_term_meta', true ); ?> <tr class="form-field"> <th scope="row" valign="top"><label for="custom_term_meta"><b>Bottom category description</b></label></th> <td> <?php wp_editor(get_term_meta( $term_id, 'custom_term_meta', true ), 'custom_term_meta', array( 'wpautop' => 1, 'media_buttons' => 1, 'textarea_name' => 'custom_term_meta', 'textarea_rows' => 5, 'tabindex' => null, 'editor_css' => '<style>.quicktags-toolbar, .wp-editor-tools, .wp-editor-wrap, .wp-switch-editor {padding: 5px 10px;}</style>', 'editor_class' => 'form-field tinyeditor', 'teeny' => 0, 'dfw' => 0, 'tinymce' => 1, 'quicktags' => 1, 'value' => TRUE, 'drag_drop_upload' => false ) );?> <p class="description">Bottom category description</p> </td> </tr> <?php } add_action( 'edited_product_cat', 'cxc_save_taxonomy_custom_meta', 10, 2 ); add_action( 'create_product_cat', 'cxc_save_taxonomy_custom_meta', 10, 2 ); function cxc_save_taxonomy_custom_meta( $term_id ) { if ( isset( $_POST['custom_term_meta'] ) ) { update_term_meta( $term_id, 'custom_term_meta', $_POST['custom_term_meta'] ); } } add_action( 'woocommerce_after_shop_loop', 'alternative_cat_description',20 ); function alternative_cat_description(){ ?> <div class="bottom-desk"> <?php if( is_product_category() ) { $term_desc = get_term_meta( get_queried_object_id(), 'custom_term_meta', true); echo $term_desc; } ?> </div> <?php } |
add_action( 'product_cat_add_form_fields', 'cxc_taxonomy_add_new_meta_field', 10, 2 ); function cxc_taxonomy_add_new_meta_field() { // this will add the custom meta field to the add new term page ?> <div class="form-field"> <label for="custom_term_meta"><b>Bottom category description</b></label> <?php $term_id = $term->term_id; wp_editor(get_term_meta( $term_id, 'custom_term_meta', true ), 'custom_term_meta', array( 'wpautop' => 1, 'media_buttons' => 1, 'textarea_name' => 'custom_term_meta', 'textarea_rows' => 5, 'tabindex' => null, 'editor_css' => '<style>.quicktags-toolbar, .wp-editor-tools, .wp-editor-wrap, .wp-switch-editor {padding: 5px 10px;}</style>', 'editor_class' => 'form-field tinyeditor', 'teeny' => 0, 'dfw' => 0, 'tinymce' => 1, 'quicktags' => 1, 'drag_drop_upload' => false ) );?> <p class="description">Bottom category description</p> </div> <?php } add_action( 'product_cat_edit_form_fields', 'cxc_taxonomy_edit_meta_field', 10, 2 ); function cxc_taxonomy_edit_meta_field( $term ) { // put the term ID into a variable $term_id = $term->term_id; // retrieve the existing value(s) for this meta field. This returns an array $term_meta = get_term_meta( $term_id, 'custom_term_meta', true ); ?> <tr class="form-field"> <th scope="row" valign="top"><label for="custom_term_meta"><b>Bottom category description</b></label></th> <td> <?php wp_editor(get_term_meta( $term_id, 'custom_term_meta', true ), 'custom_term_meta', array( 'wpautop' => 1, 'media_buttons' => 1, 'textarea_name' => 'custom_term_meta', 'textarea_rows' => 5, 'tabindex' => null, 'editor_css' => '<style>.quicktags-toolbar, .wp-editor-tools, .wp-editor-wrap, .wp-switch-editor {padding: 5px 10px;}</style>', 'editor_class' => 'form-field tinyeditor', 'teeny' => 0, 'dfw' => 0, 'tinymce' => 1, 'quicktags' => 1, 'value' => TRUE, 'drag_drop_upload' => false ) );?> <p class="description">Bottom category description</p> </td> </tr> <?php } add_action( 'edited_product_cat', 'cxc_save_taxonomy_custom_meta', 10, 2 ); add_action( 'create_product_cat', 'cxc_save_taxonomy_custom_meta', 10, 2 ); function cxc_save_taxonomy_custom_meta( $term_id ) { if ( isset( $_POST['custom_term_meta'] ) ) { update_term_meta( $term_id, 'custom_term_meta', $_POST['custom_term_meta'] ); } } add_action( 'woocommerce_after_shop_loop', 'alternative_cat_description',20 ); function alternative_cat_description(){ ?> <div class="bottom-desk"> <?php if( is_product_category() ) { $term_desc = get_term_meta( get_queried_object_id(), 'custom_term_meta', true); echo $term_desc; } ?> </div> <?php }
Да, это не ACF, это как то же самое, но руками.
В редакторе тег more добавляется, все на месте, но на странице категории его нет, он не отображается. В инспекторе кода (который F12) отображается как закомментированный . После первого абзаца нижнего описания, перед вторы....
Я именно с этим тегом сталкиваюсь впервые - я знал, что в статьях такой есть, просто не приходилось как-то его специально настраивать. По идее он должен работать в любом поле, и для типов записей, и для таксономий?
Или нужно что-то просписать специально, чтобы он внутри этого поля работал?
Дополнительно:
Ответы:
По идее он должен работать в любом поле, и для типов записей, и для таксономий?
Нет, не должен. <!--more--> работает (если ему не мешают) только в записях, основываясь на том, что выводится, список записей или одиночная запись. Для использования в других местах нужно самостоятельно реализовывать всю "механику".
- а как хоть примерно?
я гуглю more tag taxonomy, more tag custom field, more tag tinymce editor - что-то ничего не нахожу. - Перед выводом парсить текст на наличие <!--more--> и в зависимости от условий (Вам виднее каких) выводить или обрезанный текст, или полный.
- YBB, то есть через if подставлять content/excerpt? а сам more нельзя использовать внутри описания категории? На данный момент это поле-описание категории товара. Но гипотетически даже если бы просто поле с редактором для рубрик вордпресс - то чтобы в нем работало. В описаниях таксономий в общем.
- alexiusgrey,
то есть через if подставлять content/excerpt?
В общем - да. Разумеется, учетом того, что у термов нет полей content и excerpt и что тизер из description автоматом не генерируется, как это происходит с записями.
Короче, берем и программируем. Удачи!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Тег
<!--more-->сам по себе не начинает работать в произвольном поле TinyMCE. В WordPress он обрабатывается в контенте записи через стандартную логикуthe_content(). Если вы выводите term meta черезecho get_term_meta(), WordPress не применяет к этому полю разбиение на «до more» и «после more».Если нужно вручную разделить текст из поля, можно искать маркер
<!--more-->и выводить только первую часть:$content = get_term_meta($term_id, 'custom_term_meta', true); $parts = explode('<!--more-->', $content); echo wpautop(wp_kses_post($parts[0])); if (! empty($parts[1])) { echo '<a href="' . esc_url(get_term_link($term_id)) . '">Читать дальше</a>'; }
Если редактор сохраняет маркер в другом виде, временно выведите значение через
var_dump($content)или посмотрите в базе, как именно он записался. Иногда визуальный редактор экранирует комментарий или убирает его.Для нижнего описания категории товара я бы сделал отдельную логику: краткое описание в одном поле, полный SEO-текст в другом. Тогда не нужно зависеть от
more, который задуман для основного контента записей. На архиве выводите краткое поле, а ниже или на отдельной странице — полный текст. Так проще для SEO, поддержки и вёрстки.