从搜索结果中排除图像路径

时间:2018-04-18 13:27:10

标签: wordpress search

我创建了一个wordpress网站。它具有标准的搜索功能,内置Wordpress。搜索工具存在一个小问题(但主要问题)。它在页面内容中查找关键字。

e.g。网站网址是:www.mywebsite.com

内容中添加了一些带有段落的图片,其中的html代码如下:

<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Laborum facere porro aut suscipit nostrum nisi, illo excepturi possimus quibusdam obcaecati blanditiis ex, quos necessitatibus officia recusandae totam aliquid quia. Quasi.</p>

<img src="http://www.mywebsite.com/wp-content/themes/mytheme/img/photo.jpg" alt="">

<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Eos consectetur pariatur amet tempore at suscipit, tenetur modi fugiat perspiciatis quaerat distinctio dolor recusandae aliquam consequatur ullam doloremque voluptas quos eaque.</p>

因此,如果我将关键字搜索为 mywebsite ,则会在搜索结果中返回此页面,因为它会在下面的图片路径中找到关键字 mywebsite

万维网。的 mywebsite 的.com /可湿性粉剂内容/主题/ mytheme的/ IMG / photo.jpg

实际上这是错误的,因为实际页面内容文本中没有关键字 mywebsite

我该如何解决?这里有两个选项:

  1. 找到一种在搜索结果中排除图片路径的方法
  2. 排除要用于搜索查找的page_content。因此,它将查找帖子标题和其他字段,但不会在内容中查找。

1 个答案:

答案 0 :(得分:0)

这应该相对简单,请试一试:

// Exclude images from search results - WordPress
add_action( 'init', 'exclude_images_from_search_results' );
function exclude_images_from_search_results() {
    global $wp_post_types;

    $wp_post_types['attachment']->exclude_from_search = true;
}

在functions.php文件中添加以下代码段。假设图像是所述帖子的一部分,这应该排除它们。希望这有帮助!

修改

我将在您的位置做的是修改搜索结果模板,或创建自己的模板。您可以像之前在搜索结果模板中提到的那样修改内容。我已经创建了一个示例,通过它可以提取内容中的所有图像标记,并使用已清理的内容输出标题(在这种情况下,没有图像)。

<?php get_header(); ?>
<section id="primary" class="content-area">
    <main id="main" class="site-main">

    <?php if ( have_posts() ) : ?>

        <header class="page-header">
            <h1 class="page-title">
                <?php
                /* translators: %s: search query. */
                printf( esc_html__( 'Search Results for: %s'), '<span>' . get_search_query() . '</span>' );
                ?>
            </h1>
        </header><!-- .page-header -->

        <?php
        /* Start the Loop */
        while ( have_posts() ) :

            the_post();

            $post_title = $post->post_title;
            $post_content = $post->post_content;
            $post_content = preg_replace("/<img[^>]+\>/i", " ", $post_content);          
            $post_content = apply_filters('the_content', $post_content);
            $post_content = str_replace(']]>', ']]>', $post_content);


            echo "<article>";
                echo "<h1>" . $post_title . "</h1>";
                echo "<p>" . $post_content . "</p>";
            echo "</article>";

        endwhile;

        the_posts_navigation();

    else :

        // This is where your no search results output block would be
        get_template_part( 'template-parts/content', 'none' );

    endif;
    ?>

    </main><!-- #main -->
</section><!-- #primary -->
<?php
get_sidebar();
get_footer();