从帖子提交中剥离URL和电子邮件

时间:2017-05-22 作者:Tanner

我想阻止在此WordPress实例中发帖的用户在帖子中提交URL和电子邮件。

我试图通过Regex来实现这一点,但我不确定我是否写错了Regex,因为它似乎没有剥离任何URL(还没有为电子邮件编写一个URL)。有人能发现我做错了什么吗:

function censor_links( $content ) {
return preg_replace( \'/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/\', \'[LINK NOT SHOWN]\', $content );
    }
add_filter( \'the_content\', \'censor_links\' );
我应该在上使用过滤器吗save_post 还是别的什么?

1 个回复
最合适的回答,由SO网友:JItendra Rana 整理而成

您可以使用the_content (Click here for more info) 钩子在呈现帖子/页面时更改内容。

从数据库读取Post时将触发此操作。所以post内容不会在数据库中更改,只会在渲染时过滤。

add_filter( \'the_content\', \'remove_email_and_url_from_post\' );
function remove_email_and_url_from_post( $content ) {

    // Check if we\'re inside the main loop in a single post page.
    if ( is_single() && in_the_loop() && is_main_query() ) {

        // For emails
        $pattern = "/[^@\\s]*@[^@\\s]*\\.[^@\\s]*/";
        $replacement = "[removed]";
        $content = preg_replace($pattern, $replacement, $content);

        // For urls
        $pattern = "/[a-zA-Z]*[:\\/\\/]*[A-Za-z0-9\\-_]+\\.+[A-Za-z0-9\\.\\/%&=\\?\\-_]+/i";
        $replacement = "[removed]";
        $content = preg_replace($pattern, $replacement, $content);

    }

    return $content;
}
或者用同样的方法content_save_pre

这将在post保存到数据库时触发。因此,这实际上将从帖子中删除过滤后的内容,然后将其保存到数据库中。

function remove_email_and_url_from_post( $content ) {
    return $content;
    $pattern = "/[^@\\s]*@[^@\\s]*\\.[^@\\s]*/";
    $replacement = "[removed]";
    $content = preg_replace($pattern, $replacement, $content);

        // For urls
    $pattern = "/[a-zA-Z]*[:\\/\\/]*[A-Za-z0-9\\-_]+\\.+[A-Za-z0-9\\.\\/%&=\\?\\-_]+/i";
    $replacement = "[removed]";
    $content = preg_replace($pattern, $replacement, $content);
    return $content;
}
add_filter( \'content_save_pre\', \'remove_email_and_url_from_post\', 10, 1 );

结束

相关推荐

使用Apply_Filters帮助输出POST类

我不熟悉脚本,这是一个插件,我想修改它来输出post类。当我尝试使用时:apply_filters( \'post_class\', $page->post_class ) it仅输出array=\" \". 我是否需要一个附加函数来连接到post类?在我的研究中,我无法判断我的语法是否错误,或者我在类中缺少了一个要“拉”的函数apply_filters 抓住。非常感谢你的帮助。 var $db_fields = array (\'parent\' => \'post_parent\',