从搜索结果中剥离HTML标签

时间:2012-11-14 作者:Bachir Messaouri

当我进行搜索时,如果img标签中有一个图像标题,它会以一种非常难看的方式显示在搜索结果中(显示整个标签和图片)。我找到了这个脚本,它应该能解决这个问题,这是我在互联网上找到的唯一关于这个主题的东西。

<?php
function super_search_exclude_activate() {
    $striptags = "CREATE FUNCTION fnStripTags( Dirty longtext )
        RETURNS longtext
        DETERMINISTIC 
        BEGIN
          DECLARE iStart, iEnd, iLength int;
            WHILE Locate( \'<\', Dirty ) > 0 And Locate( \'>\', Dirty, Locate( \'<\', Dirty )) > 0 DO
              BEGIN
                SET iStart = Locate( \'<\', Dirty ), iEnd = Locate( \'>\', Dirty, Locate(\'<\', Dirty ));
                SET iLength = ( iEnd - iStart) + 1;
                IF iLength > 0 THEN
                  BEGIN
                    SET Dirty = Insert( Dirty, iStart, iLength, \'\');
                  END;
                END IF;
              END;
            END WHILE;
            RETURN Dirty;
        END;";
    global $wpdb;
    $wpdb->query("DROP FUNCTION IF EXISTS fnStripTags");
    $wpdb->query($striptags);
}
register_activation_hook(__FILE__, \'super_search_exclude_activate\');

function super_search_exclude_deactivate() {
    global $wpdb;
    $wpdb->query("DROP FUNCTION IF EXISTS fnStripTags");
}
register_deactivation_hook(__FILE__, \'super_search_exclude_deactivate\');

function super_search_exclude_posts_search($search) {
    if (is_search()) {
        global $wpdb;
        if (stripos($search, \'post_content LIKE\')) {
            $search = str_replace("{$wpdb->posts}.post_content LIKE", "fnStripTags({$wpdb->posts}.post_content) LIKE", $search);
        }
    }
    return $search;
}
add_filter(\'posts_search\', \'super_search_exclude_posts_search\');
我没有任何错误消息,但搜索引擎不会返回结果,除非我停用插件,然后回到原点。

问题是什么?

PS:我用这个脚本创建了一个插件,并在右侧的管理部分激活了它。

2 个回复
最合适的回答,由SO网友:totels 整理而成

我不知道您试图使用的代码,就个人而言,我永远不会使用排除结果的解决方案,很可能搜索的项目就在这些结果中,排除它们只会降低服务质量

相反,您可以使用search.php template file 为了调整搜索结果的显示方式,php中有一个非常方便的函数,名为strip_tags() 这将从字符串中删除所有HTML标记。

更新时间:

具体而言:

search.php:

<?php
/**
 * Template Name: Search Results Page
 */
get_header();
?>
<section id="primary">
    <div id="content" role="main">
        <?php if (have_posts()): ?>
            <header class="page-header"><?php _e("Search Results"); ?></header>
            <div class="entry-content">
                <?php
                while (have_posts()): the_post();
                    echo strip_tags(get_the_content());
                endwhile;
                ?>
            </div>
        <?php endif; ?>
    </div>
</section>
<?php
get_footer();

SO网友:Oleg Butuzov

为什么不在保存(save\\u post hook)时创建一个清晰(非html)的verson fo post,并将其放置在psots选项卡(delta tables)的其他字段中,并在搜索站点时按此字段进行搜索(posts\\u where\\u request filter hook)。

结束

相关推荐

WP_EDITOR不修改初始内容的html标签

如何在wp\\U编辑器中设置tinyMCE编辑器,使其不修改/替换初始内容的html标记?我正在加载带有标签的html内容(我知道它们已被弃用,但我需要它们),tinyMCE编辑器正在替换它们。我尝试了几件事,但没有成功。我有点沮丧了。我需要帮助。我需要的是编辑器不更改加载的html内容。对不起,我的英语不好!这不是我的母语。提前感谢!