admin管理员组文章数量:1130349
I have enabled future (scheduled) posts to display as single post so on that page comments are enabled but there is a problem when i try to post comment. I get a blank screen without any warning or error displayed?
I suppose that there is a problem when commenting on posts that are not yet published. Is there a way to enable commenting on future posts?
I have enabled future (scheduled) posts to display as single post so on that page comments are enabled but there is a problem when i try to post comment. I get a blank screen without any warning or error displayed?
I suppose that there is a problem when commenting on posts that are not yet published. Is there a way to enable commenting on future posts?
Share Improve this question asked Mar 3, 2015 at 7:57 Cookie_PaCookie_Pa 91 silver badge5 bronze badges1 Answer
Reset to default 1You can not enable comments in future posts. Those posts are not public and are not private, so they verify the conditional in line 61 of wp-comments-post.php file; that conditional is (WP 4.1.1):
} elseif ( ! $status_obj->public && ! $status_obj->private ) {
/**
* Fires when a comment is attempted on a post in draft mode.
*
* @since 1.5.1
*
* @param int $comment_post_ID Post ID.
*/
do_action( 'comment_on_draft', $comment_post_ID );
exit;
}
To allow comments in scheduled posts you could hook in comment_on_draft action and copy the insert comment code from wp-comments-post.php inside the callback function.
add_action( 'comment_on_draft', function( $comment_post_ID ) {
do_action( 'pre_comment_on_post', $comment_post_ID );
$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
$comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
// If the user is logged in
$user = wp_get_current_user();
if ( $user->exists() ) {
if ( empty( $user->display_name ) )
$user->display_name=$user->user_login;
$comment_author = wp_slash( $user->display_name );
$comment_author_email = wp_slash( $user->user_email );
$comment_author_url = wp_slash( $user->user_url );
if ( current_user_can( 'unfiltered_html' ) ) {
if ( ! isset( $_POST['_wp_unfiltered_html_comment'] )
|| ! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID )
) {
kses_remove_filters(); // start with a clean slate
kses_init_filters(); // set up the filters
}
}
} else {
if ( get_option( 'comment_registration' ) || 'private' == $status ) {
wp_die( __( 'Sorry, you must be logged in to post a comment.' ), 403 );
}
}
$comment_type = '';
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).' ), 200 );
} else if ( ! is_email( $comment_author_email ) ) {
wp_die( __( '<strong>ERROR</strong>: please enter a valid email address.' ), 200 );
}
}
if ( '' == $comment_content ) {
wp_die( __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
}
$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
$comment_id = wp_new_comment( $commentdata );
if ( ! $comment_id ) {
wp_die( __( "<strong>ERROR</strong>: The comment could not be saved. Please try again later." ) );
}
$comment = get_comment( $comment_id );
/**
* Perform other actions when comment cookies are set.
*
* @since 3.4.0
*
* @param object $comment Comment object.
* @param WP_User $user User object. The user may not exist.
*/
do_action( 'set_comment_cookies', $comment, $user );
$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
/**
* Filter the location URI to send the commenter after posting.
*
* @since 2.0.5
*
* @param string $location The 'redirect_to' URI sent via $_POST.
* @param object $comment Comment object.
*/
$location = apply_filters( 'comment_post_redirect', $location, $comment );
wp_safe_redirect( $location );
exit;
});
Additionally, we could check for "future" status to exclude "draft" posts, but in this case we can end up with conflicts with other plugins that use comment_on_draft action hook:
add_action( 'comment_on_draft', function( $comment_post_ID ) {
if( get_post_status( $comment_post_ID ) != 'future' ) {
exit;
}
//Rest of the code
});
I have enabled future (scheduled) posts to display as single post so on that page comments are enabled but there is a problem when i try to post comment. I get a blank screen without any warning or error displayed?
I suppose that there is a problem when commenting on posts that are not yet published. Is there a way to enable commenting on future posts?
I have enabled future (scheduled) posts to display as single post so on that page comments are enabled but there is a problem when i try to post comment. I get a blank screen without any warning or error displayed?
I suppose that there is a problem when commenting on posts that are not yet published. Is there a way to enable commenting on future posts?
Share Improve this question asked Mar 3, 2015 at 7:57 Cookie_PaCookie_Pa 91 silver badge5 bronze badges1 Answer
Reset to default 1You can not enable comments in future posts. Those posts are not public and are not private, so they verify the conditional in line 61 of wp-comments-post.php file; that conditional is (WP 4.1.1):
} elseif ( ! $status_obj->public && ! $status_obj->private ) {
/**
* Fires when a comment is attempted on a post in draft mode.
*
* @since 1.5.1
*
* @param int $comment_post_ID Post ID.
*/
do_action( 'comment_on_draft', $comment_post_ID );
exit;
}
To allow comments in scheduled posts you could hook in comment_on_draft action and copy the insert comment code from wp-comments-post.php inside the callback function.
add_action( 'comment_on_draft', function( $comment_post_ID ) {
do_action( 'pre_comment_on_post', $comment_post_ID );
$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
$comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
// If the user is logged in
$user = wp_get_current_user();
if ( $user->exists() ) {
if ( empty( $user->display_name ) )
$user->display_name=$user->user_login;
$comment_author = wp_slash( $user->display_name );
$comment_author_email = wp_slash( $user->user_email );
$comment_author_url = wp_slash( $user->user_url );
if ( current_user_can( 'unfiltered_html' ) ) {
if ( ! isset( $_POST['_wp_unfiltered_html_comment'] )
|| ! wp_verify_nonce( $_POST['_wp_unfiltered_html_comment'], 'unfiltered-html-comment_' . $comment_post_ID )
) {
kses_remove_filters(); // start with a clean slate
kses_init_filters(); // set up the filters
}
}
} else {
if ( get_option( 'comment_registration' ) || 'private' == $status ) {
wp_die( __( 'Sorry, you must be logged in to post a comment.' ), 403 );
}
}
$comment_type = '';
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).' ), 200 );
} else if ( ! is_email( $comment_author_email ) ) {
wp_die( __( '<strong>ERROR</strong>: please enter a valid email address.' ), 200 );
}
}
if ( '' == $comment_content ) {
wp_die( __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
}
$comment_parent = isset($_POST['comment_parent']) ? absint($_POST['comment_parent']) : 0;
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'comment_parent', 'user_ID');
$comment_id = wp_new_comment( $commentdata );
if ( ! $comment_id ) {
wp_die( __( "<strong>ERROR</strong>: The comment could not be saved. Please try again later." ) );
}
$comment = get_comment( $comment_id );
/**
* Perform other actions when comment cookies are set.
*
* @since 3.4.0
*
* @param object $comment Comment object.
* @param WP_User $user User object. The user may not exist.
*/
do_action( 'set_comment_cookies', $comment, $user );
$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
/**
* Filter the location URI to send the commenter after posting.
*
* @since 2.0.5
*
* @param string $location The 'redirect_to' URI sent via $_POST.
* @param object $comment Comment object.
*/
$location = apply_filters( 'comment_post_redirect', $location, $comment );
wp_safe_redirect( $location );
exit;
});
Additionally, we could check for "future" status to exclude "draft" posts, but in this case we can end up with conflicts with other plugins that use comment_on_draft action hook:
add_action( 'comment_on_draft', function( $comment_post_ID ) {
if( get_post_status( $comment_post_ID ) != 'future' ) {
exit;
}
//Rest of the code
});
本文标签: Comments on future posts
版权声明:本文标题:Comments on future posts 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/questions/1749072481a2311792.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论