Поддержка Проблемы и решения Функция вывода текста из h2…h6 из статьи

  • Решено rianovost

    (@suryano11)


    Здравствуйте!

    Всячески безуспешно пытаюсь вывести текст из h2…h6 кодом, например в качестве except или discription.

    5Известно, что через $this->get_title можно вывести заголовок записи, благодаря чему в плагинах есть возможность вывести h1 title если применить переменные %title%, но я хочу вывести h2-h6, даже попробовал редактировать их код:

    $this->register_replacement( 'title h2', [ 'name'        => esc_html__( 'Post Title h2', 'rank-math' ), 'description' => esc_html__( 'Title of the current post/page', 'rank-math' ), 'variable'    => 'title h2', 'example'     => $this->get_title('h2'), 'nocache'     => true, ], [ $this, 'get_title' ]  );

    естественно , ничего не вышло, кроме ошибок .моя просьба не в том, как исправить код плагина, этот вопрос к плагину .я просто не могу понять, если get_the_title() выводит заголовок записи и отсюда соответственно $this->get_title выводит h1 , тогда что выводит h2….h6 ? например попробовал get_the_title(h2) вылез ошибка .

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

    function get_post_image() {global $post, $posts;$first_img = '';ob_start();ob_end_clean();$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);$first_img = $matches [1] [0];if(empty($first_img)){$img_dir = get_bloginfo('template_directory');$first_img = "<?php the_post_thumbnail('thumbnail')";$first_img = $img_dir . '/images/post-default.jpg';}return $first_img;}

    Как только функцию создали в functions.php пишем следующий код в месте, где нужна выводить изображение

    <?php/***Если надо, чтобы выводилась миниатюра, а если ее нет, первая картинка с записи, то нужно вставлять условие следующего вида*/ if ( has_post_thumbnail() ) {}else { ?><img src="<?php echo first_post_image() ?>"  /><?php } ?>

    то есть если не задано изображение записи, то этот код выводит первую картинку в статьи.Теперь можно же задавать условие , что если не задан excpept записи , то вывести содержимое первого h3 . должно же существовать возможность создание функции first_post_h3 ?то есть по логике выше функции мы выводим вместо except или discription содержимое первого встречного заголовка в записи. Я просто не знаю переменные для заголовков в отличие от изображении.

    Может быть не правильно сформулировал вопрос, но если можно создать функцию вывода первого изображения, почему нельзя создать функцию вывода первого текста из подзаголовка?

    Помогите пожалуйста

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Можно попробовать создать функцию, которая будет выводить содержимое первого тега H3 вместо excerpt если он не задан в записи.

    Вот как вариант:

    function get_custom_excerpt($post_id) {
        $excerpt = get_post_meta($post_id, '_excerpt', true);
        if (empty($excerpt)) {
            $content = get_the_content();
            preg_match('/<h3>(.*?)<\/h3>/', $content, $matches);
            if (!empty($matches)) {
                $excerpt = $matches[1];
            }
        }
        return $excerpt;
    }

    Эта функция принимает ID поста и возвращает сокращенное содержание, основанное на excerpt или на первом встречном теге H3, если excerpt не задан.

    Чтобы вывести сокращенное содержание на странице вашего сайта, вы можете вызвать эту функцию в нужном месте в вашем шаблоне WordPress, например, внутри цикла while:

    <?php while ( have_posts() ) : the_post(); ?>
        <h2><?php the_title(); ?></h2>
        <p><?php echo get_custom_excerpt(get_the_ID()); ?></p>
        <a href="<?php the_permalink(); ?>">Далее</a>
    <?php endwhile; ?>

    Пробуйте как то так реализовать.

    Спасибо ввам огромное! Сегодня — завтра попробую и отпишусь! Все началось с того, что я долго настроил свой стиль и шрифт для каждого заголовка отдельно и соответственно, при создании поста в большинстве случаев придётся сначала записать h2 или h3 в качестве введения а уж потом внизу идут <p> абзацы, но как на зло seo плагины игнорируют h подзаголовки и выведут в качестве discretion первый абзац <p> и то это в лучшем случае, но как на зло, нужна при выдаче поисковиков текст из h подзаголовка, по этому как воздух и вода нужна функция вывода текста первого h подзаголовка а не абзаца, который по сути является второстепенным текстом

    Попробовал, но ничего не изменился, по прежнему тексты в подзаголовках не попадут в поисковую выдачу. То есть плагин берёт их из первого абзаца <p> а текст подзаголовка полностью игнорируется

    Модератор Yuri

    (@yube)

    Так небось же в тексте h2/h3 с классами и/или инлайновыми стилями, а в регулярке указали «голенький» <h2>, вот оно и не совпадает.

    Причем тут стили если поисковик сканирует «голый текст», тут явно текст не попадает в поисковики

    Модератор Yuri

    (@yube)

    Причем тут стили

    При том, что <h3 class="foo"> никогда не сравнится с шаблоном <h3>.

    если поисковик сканирует

    При чем тут поисковик, если речь о регулярном выражении?

    preg_match('/<h3>(.*?)<\/h3>/', $content, $matches);

    Ну тогда как поступить, что плагин не игнорировал текст в заголовках. То, что плагин автоматически выводит excerpt это хорошо, но то что выводит текст только из абзацев и игнорирует заголовки, это очень плохо!На скриншоте видно, что плагин игнорирует текст заголовка. Должно быть же способ, который передаёт информацию от заголовка в except или discretion?Можно же создать функцию, которая гласит: “взять текст из h2, h3 и так далее, а если их нет в записи, то тогда уже из абзаца <p>

    Суть проблема — На сайте пишу текст следующим образом: *Заголовок записи*

    Подзаголовок h2

    Подзаголовок h3

    Текст в абзацах

    Подзаголовок h3

    Текст в абзаце и так далее.

    Происходит неприятное с поисковиком. Плагин rank math так, как не находит seo_description то автоматически выводит первое N количество символов в качестве excerpt записи, но не приятного тут в том, что плагин игнорирует весь текст в заголовках и начнёт с абзаца а мне как раз нужно наоборот, чтобы выводил текст из загаловка. В плагине есть возможность настроить переменные и вывести необходимую информацию в поисковом сниппете, например %excerpt% выводит первый абзац, %seo_description% выводит то, что было создано вручную при создании записи, также можно задать в настройках вывод даты, времени, названия сайта и так далее. Но проблема в том, что не существует никакие переменные для вывода текста заголовка и никаких вариантов создать их не возможно. Вариантов решения полагал несколько:

    1. Посредством кода «приравнять заголовок к excerpt посредством функции get_excerpt. Не помогло, в анонсах на главной странице да, заголовки начали выводится, но поисковик и плагин по прежнему игнорируют их.

    2. Попытался создавать переменные для заголовков, тоже не давал результата, вылез ошибки потому что если для создании переменных для excerpt мы берём функцию the_excerpt, для title the_title, для category the_get_categoryи так далее, то для заголовка неизвестно, какую функцию брать, например не существует функции the_get_h2. То есть надежда на то, что можно сделать переменные для h2-h6 пропала.

    3. Вручную редактировать «стопицот» записей и задать для них seo_description в соответствующем окне редактора.

    Модератор Yuri

    (@yube)

    На скриншоте видно

    Возможно, если виден скриншот. Мне — не виден.

    Можно же создать функцию, которая гласит: “взять текст из h2, h3 и так далее, а если их нет в записи, то тогда уже из абзаца

    Можно. Вам даже дали почти такую функцию (допилить — будет совсем такая), и я написал, почему она может не работать.

    плагин игнорирует весь текст в заголовках

    И что по этому поводу говорят авторы плагина?

    Кажется , я ближе к решению :

    Значит, когда я создаю запись, и пишу там одни заголовки разного уровня, при этом не важно, посредством редактора или html, то сниппет берет с них весь текст, как и я захотел, но как только пишу хот один абзац ,то все подзаголовки игнорируются и выводится только текст из абзаца . это значит.ю что где-то в функциях плагина написано » если есть абзац, то игнорировать все подзаголовки».

    Выводит ему переменные excerpt

    помогите пожалуйста найти развязку

    https://rialipetsk.info/wp-content/uploads/2023/03/2023-03-12_19-25-27.png

    https://rialipetsk.info/wp-content/uploads/2023/03/2023-03-12_19-24-15.png

    Разобрался:

    Разработчики плагина намеренно сделали так, что игнорировал заголовки и почему-то решили, что так правильно. То есть с моим шаблоном всё нормально, весь косяк на стороне плагина. Поставил оценку 1, модераторы не пропустили, снёс плагин к черту, зачем мне функции, которые нельзя настраивать. По идее они должны написать опцию с возможностью вывести заголовки для тех, кому это нужно!

    Тут подробно я со скриншотами доказал, что они не правы, но зато самопроизвольно поставили метку «resolved», хотя вопрос не решён

    https://wordpress.org/support/topic/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d0%bd%d0%be-%d1%81-%d0%be%d1%88%d0%b8%d0%b1%d0%ba-2/

    Если нни у кого не остались вопросы, то поставим метку «решено».

    Решение:

    Ошибка на стороне плагина, там вшита функция удаления подзаголовков при создании абзаца @rankmathteam почему-то решил, что так правильно и изменить не намерены.

    Вывод:

    Удалить плагин

    Модератор Yui

    (@fierevere)

    永子

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


    Разработчики плагина намеренно сделали так, что игнорировал заголовки и почему-то решили, что так правильно. То есть с моим шаблоном всё нормально, весь косяк на стороне плагина. Поставил оценку 1…, снёс плагин к черту, зачем мне функции, которые нельзя настраивать

    А когда вы начинаете детально расписывать проблему, да еще и скриншоты выкладывать — см правила форума п 21, и не нужно возмущаться что ваши отзывы удаляются, правила они для всех.

    Автор rianovost

    (@suryano11)

    Вопрос решен , поменял плагин и все! Хотя rank math потом тоже мне через месяц отправил php код для исправления и они признались, что специально урезали эту функцию, так, как читают ее ненужной (зачем?).

    Но , как говориться «поезд ушел » . Вопрос отмечу решенным, но если кому то понадобится функция вывода заголовков в поисковики , то могут писать мне лично , я им отправлю код

Просмотр 14 ответов — с 1 по 14 (всего 14)
  • Тема «Функция вывода текста из h2…h6 из статьи» закрыта для новых ответов.