Wordpress 添加特色图片到搜索

问题描述 投票:0回答:1

我需要帮助创建一个functions.php 挂钩,该挂钩可以在搜索结果摘录中添加特色图像。我找到了一种将其直接添加到 wp-includes/blocks/post-excerpt.php 的方法,如以下代码所示,但我不想对核心功能进行硬编码,因为它很可能会在更新中消失。 (包含 $thumbnail 变量的行)。感谢您宝贵的时间,ukw。

function render_block_core_post_excerpt( $attributes, $content, $block ) {
    if ( ! isset( $block->context['postId'] ) ) {
        return '';
    }

    /*
    * The purpose of the excerpt length setting is to limit the length of both
    * automatically generated and user-created excerpts.
    * Because the excerpt_length filter only applies to auto generated excerpts,
    * wp_trim_words is used instead.
    */
    $excerpt_length = $attributes['excerptLength'];
    $excerpt        = get_the_excerpt( $block->context['postId'] );
    if ( isset( $excerpt_length ) ) {
        $excerpt = wp_trim_words( $excerpt, $excerpt_length );
    }

    $more_text           = ! empty( $attributes['moreText'] ) ? '<a class="wp-block-post-excerpt__more-link" href="' . esc_url( get_the_permalink( $block->context['postId'] ) ) . '">' . wp_kses_post( $attributes['moreText'] ) . '</a>' : '';
    $filter_excerpt_more = static function ( $more ) use ( $more_text ) {
        return empty( $more_text ) ? $more : '';
    };
    /**
     * Some themes might use `excerpt_more` filter to handle the
     * `more` link displayed after a trimmed excerpt. Since the
     * block has a `more text` attribute we have to check and
     * override if needed the return value from this filter.
     * So if the block's attribute is not empty override the
     * `excerpt_more` filter and return nothing. This will
     * result in showing only one `read more` link at a time.
     */
    add_filter( 'excerpt_more', $filter_excerpt_more );
    $classes = array();
    if ( isset( $attributes['textAlign'] ) ) {
        $classes[] = 'has-text-align-' . $attributes['textAlign'];
    }
    if ( isset( $attributes['style']['elements']['link']['color']['text'] ) ) {
        $classes[] = 'has-link-color';
    }
    $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classes ) ) );
    $thumbnail = get_the_post_thumbnail($post->ID, 'thumbnail');
    $content               = '<div>' . $thumbnail . '</div><p class="wp-block-post-excerpt__excerpt">'. $excerpt;
    $show_more_on_new_line = ! isset( $attributes['showMoreOnNewLine'] ) || $attributes['showMoreOnNewLine'];
    if ( $show_more_on_new_line && ! empty( $more_text ) ) {
        $content .= '</p><p class="wp-block-post-excerpt__more-text">' . $more_text . '</p>';
    } else {
        $content .= " $more_text</p>";
    }
    remove_filter( 'excerpt_more', $filter_excerpt_more );
    return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $content );
}
wordpress
1个回答
0
投票

函数

get_the_excerpt
正在调用
apply_filters( 'get_the_excerpt', $post->post_excerpt, $post )
(doc),所以你可以挂钩它。

示例:

function filter_excerpt( $excerpt, $post ) {
    $thumbnail = get_the_post_thumbnail( $post->ID, 'thumbnail' );
    $excerpt = '<div>' . $thumbnail . '</div>' . $excerpt;
    return $excerpt;
}
add_filter( 'get_the_excerpt', 'filter_excerpt', 10, 2 );

只要您仅添加 HTML 标签,它就不算入

$excerpt_length

© www.soinside.com 2019 - 2024. All rights reserved.