在空白评论帖子错误页面上添加返回帖子链接

时间:2015-11-04 作者:iSaumya

当您访问任何wordpress帖子并单击“发表评论”按钮时,它只会将空白数据发布到服务器,在php级别进行检查时,它会向用户显示此恼人的错误消息:

enter image description here

我们都看到了。但我想知道的是,是否有办法在其中添加“返回XYZ文章”链接。其中,XYZ Artcile是他在无意中单击“发表评论”按钮时访问的帖子页面。

这在很多人身上发生过很多次。

期待您的想法。

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

我想\'pre_comment_on_post\' 是一个更好的钩子,尽管您必须复制“wp comments post.php”中的一些逻辑才能使用它,例如:

add_action( \'pre_comment_on_post\', function ( $comment_post_ID ) {
    $go_back = sprintf( __( \'<br><a href="javascript:history.go(-1)">Back to "%s" Article</a>\' ), get_the_title( $comment_post_ID ) );
    // Part-copied from "wp-comments-post.php", with $go_back tagged onto error strings.
    $comment_author       = ( isset($_POST[\'author\']) )  ? trim(strip_tags($_POST[\'author\'])) : null;
    $comment_author_email = ( isset($_POST[\'email\']) )   ? trim($_POST[\'email\']) : null;
    $comment_content      = ( isset($_POST[\'comment\']) ) ? trim($_POST[\'comment\']) : null;
    $user = wp_get_current_user();
    if ( get_option(\'require_name_email\') && !$user->exists() ) {
        if ( 6 > strlen( $comment_author_email ) || \'\' == $comment_author ) {
            wp_die( __( \'<strong>ERROR</strong>: please fill the required fields (name, email).\' ) . $go_back, 200 );
        } elseif ( ! is_email( $comment_author_email ) ) {
            wp_die( __( \'<strong>ERROR</strong>: please enter a valid email address.\' ) . $go_back, 200 );
        }
    }
    if ( \'\' == $comment_content ) {
        wp_die( __( \'<strong>ERROR</strong>: please type a comment.\' ) . $go_back, 200 );
    }
} );

SO网友:Axel

我没有看到任何钩子,但你可以用gettext 过滤器挂钩。将以下函数添加到主题的函数中。php应该做到这一点。代替text-domain 使用主题的文本域

if ( ! function_exists( \'my_gettext\' ) ) {
    function my_gettext( $translated_text, $untranslated_text, $domain ) {
        global $pagenow;

        if ( $pagenow === \'wp-comments-post.php\' ) {
            switch ( $untranslated_text ) {
                case \'<strong>ERROR</strong>: please fill the required fields (name, email).\' :
                    $translated_text = __( \'<strong>ERROR</strong>: please fill the required fields (name, email).<br /><a href="javascript:javascript:history.go(-1)">Back to XYZ Article</a>\', \'text-domain\' );
                    break;
            }
        }
        return $translated_text;
    }
}
add_filter( \'gettext\', \'my_gettext\', 20, 3 );
该函数查找case 在wp评论帖子中。php并将其替换为$translated_text.

缺点是,我们通常不会在国际化函数中包含HTML,但拆分它却不起作用。因此,以下内容将引发错误:

$translated_text = \'<strong>\' . __( \'ERROR\', \'text-domain\' ) . \'</strong>:\' . __( \'please fill the required fields (name, email).\', \'text-domain\' ) . \'<br /><a href="javascript:javascript:history.go(-1)">\' . __( \'Back to XYZ Article\', \'text-domain\' ) . \'</a>\';

<小时>

UPDATE following Pieter\'s comment

记录在案sprinf 确实没有必要在国际化函数中包含HTML。。。

if ( ! function_exists( \'my_gettext\' ) ) {
    function my_gettext( $translated_text, $untranslated_text, $domain ) {
        global $pagenow;
        if ( $pagenow === \'wp-comments-post.php\' ) {
            switch ( $untranslated_text ) {
                case \'<strong>ERROR</strong>: please fill the required fields (name, email).\' :
                    $translated_text = sprintf( __( \'%1$s: please fill the required fields (name, email).%2$s\', \'text-domain\' ), \'<strong>\' . __( \'ERROR\', \'text-domain\' ) . \'</strong>\', \'<br /><a href="javascript:javascript:history.go(-1)">\' . __( \'Back to XYZ Article\', \'text-domain\' ) . \'</a>\' );
                    break;
            }
        }
        return $translated_text;
    }
}
add_filter( \'gettext\', \'my_gettext\', 20, 3 );

相关推荐

Delete comments function

我做了一个功能,向登录用户显示她的所有评论,并允许她通过与打印的每个评论相关的删除按钮单独删除这些评论。该功能起作用,但在执行表单操作后,刷新时页面仍会显示已删除的注释,并且仅当您再次转到该页面(不是刷新,而是通过单击浏览器地址栏上的返回键)时,页面才会显示已批准的注释。如何解决此问题?代码如下: function custom_delete_post_comment() { $comment_id = comment_ID();