Почему может не работать тег more при отображении поля с редактором TinyMCE?

Ссылка скопирована
1 ответ

Тема самописная на 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 автоматом не генерируется, как это происходит с записями.
    Короче, берем и программируем. Удачи!

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Тег <!--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('&lt;!--more--&gt;', $content);
 
echo wpautop(wp_kses_post($parts[0]));
 
if (! empty($parts[1])) {
    echo '&lt;a href="' . esc_url(get_term_link($term_id)) . '"&gt;Читать дальше&lt;/a&gt;';
}

$content = get_term_meta($term_id, 'custom_term_meta', true); $parts = explode('&lt;!--more--&gt;', $content); echo wpautop(wp_kses_post($parts[0])); if (! empty($parts[1])) { echo '&lt;a href="' . esc_url(get_term_link($term_id)) . '"&gt;Читать дальше&lt;/a&gt;'; }

Если редактор сохраняет маркер в другом виде, временно выведите значение через var_dump($content) или посмотрите в базе, как именно он записался. Иногда визуальный редактор экранирует комментарий или убирает его.

Для нижнего описания категории товара я бы сделал отдельную логику: краткое описание в одном поле, полный SEO-текст в другом. Тогда не нужно зависеть от more, который задуман для основного контента записей. На архиве выводите краткое поле, а ниже или на отдельной странице — полный текст. Так проще для SEO, поддержки и вёрстки.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно