Интервал в отрывке

Я пытаюсь выяснить, как можно контролировать отображение отрывка с помощью PHP. Как мне заставить его отображать интервал html внутри поста, а не просто показывать один большой абзац?

Мне удалось ввести некоторый php-код для рендеринга гиперссылки в отрывке, но застрял на том, как не дать отрывку сократить интервал.

Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 2
  1. Pieter Goosen

    Отрывок ставит все html-теги, что разочаровывает многих. Я написал пользовательский отрывок, который не дает отрывать какие-либо HTML-теги. Это также нарушает отрывок после заданного количества слов. Если вам нужно вырезать отрывок из точных слов, вам просто нужно изменить мой код.

    Сначала вам нужно удалить исходный отрывок, а затем зарегистрировать новый. Для этого добавьте следующий код в ваш functions.php

    remove_filter('get_the_excerpt', 'wp_trim_excerpt');
    add_filter('get_the_excerpt', 'pietergoosen_custom_wp_trim_excerpt'); 
    

    Теперь для пользовательского отрывка. Добавьте этот ниже

    function pietergoosen_custom_wp_trim_excerpt($pietergoosen_excerpt) {
        global $post;
        $raw_excerpt = $pietergoosen_excerpt;
            if ( '' == $pietergoosen_excerpt ) {
    
                $pietergoosen_excerpt = get_the_content('');
                $pietergoosen_excerpt = strip_shortcodes( $pietergoosen_excerpt );
                $pietergoosen_excerpt = apply_filters('the_content', $pietergoosen_excerpt);
                $pietergoosen_excerpt = str_replace(']]>', ']]>', $pietergoosen_excerpt);
    
                //Установите количество слов отрывка.
                    $excerpt_word_count = 75;
                    $excerpt_length = apply_filters('excerpt_length', $excerpt_word_count); 
                    $tokens = array();
                    $excerptOutput = '';
                    $count = 0;
    
                    // Разделите строку на токены; HTML-теги или слова, за которыми следуют любые пробелы
                    preg_match_all('/(<[^>]+>|[^<>s]+)s*/u', $pietergoosen_excerpt, $tokens);
    
                    foreach ($tokens[0] as $token) { 
    
                        if ($count >= $excerpt_word_count && preg_match('/[?.!]s*$/uS', $token)) { 
                    
                            $excerptOutput .= trim($token);
                            break;
                        }
    
                       // Добавить слова, чтобы завершить предложение
                        $count++;
    
                      // Добавить то, что осталось от токена
                        $excerptOutput .= $token;
                    }
    
                $pietergoosen_excerpt = trim(force_balance_tags($excerptOutput));
    
                    $excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(__( 'Read more about: %s &nbsp;&raquo;', 'pietergoosen' ), get_the_title()) . '</a>'; 
                    $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); 
    
                    $pos = strrpos($pietergoosen_excerpt, '</');
                    if ($pos !== false)
                  // Внутри последнего HTML-тега
                    $pietergoosen_excerpt = substr_replace($pietergoosen_excerpt, $excerpt_end, $pos, 0);
                    else
                    // После контента
                    $pietergoosen_excerpt .= $excerpt_end;
    
                return $pietergoosen_excerpt;   
    
            }
            return apply_filters('pietergoosen_custom_wp_trim_excerpt', $pietergoosen_excerpt, $raw_excerpt);
        }
    

    Если вам нужны только определенные теги, вы можете использовать код ниже. Просто добавьте приведенный ниже код и удалите теги, которые вам нужны.

    function pietergoosen_get_allowedtags() {
        return '<head>,<title>,<base>,<link>,<meta>,<style>,<script>,<noscript>,<body>,<section>,<nav>,
        <article>,<aside>,<h1>,<h2>,<h3>,<h4>,<h5>,<h6>,<header>,<footer>,<address>,<main>,<p>,<hr>,
        <pre>,<blockquote>,<ol>,<ul>,<li>,<dl>,<dt>,<dd>,<figure>,<figcaption>,<div>,<a>,<em>,<strong>,
        <small>,<s>,<cite>,<q>,<dfn>,<abbr>,<data>,<time>,<code>,<var>,<samp>,<kbd>,<sub>,<sup>,<i>,<b>,
        <u>,<mark>,<ruby>,<rt>,<rp>,<bdi>,<bdo>,<span>,<br>,<wbr>,<ins>,<del>,<img>,<iframe>,<embed>,
        <object>,<param>,<video> ,<audio>,<source>,<track>,<canvas>,<map>,<area>,<svg>,<math>,<table>,
        <caption>,<colgroup>,<col>,<tbody>,<thead>,<tfoot>,<tr>,<td>,<th>,<form>,<fieldset>,<legend>,<label>,
        <input>,<button>,<select>,<datalist>,<optgroup>,<option>,<textarea>,<keygen>,<output>,<progress>,<meter>,
        <details>,<summary>,<menuitem>,<menu>'; 
    }
    

    Просто добавьте строку $pietergoosen_excerpt = strip_tags($pietergoosen_excerpt, pietergoosen_get_allowedtags()); перед $pietergoosen_excerpt = str_replace(']]>', ']]&gt;', $pietergoosen_excerpt);

  2. engelen

    Функция wpautop автоматически преобразует разрывы строк в теги абзацев. Предполагая, что ваш CSS-стиль настроен правильно, вы можете применить wpautop к любому тексту с символами новой строки, и WordPress автоматически добавит теги абзаца.

    wpautop автоматически добавляется в качестве фильтра в the_excerpt , поэтому это должно быть сделано по умолчанию. Не могли бы вы опубликовать код, который вы используете для отображения отрывка?

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: