$conf, $runtime; function_exists('chdir') AND chdir(APP_PATH); $r = 'mysql' == $conf['cache']['type'] ? website_set('runtime', $runtime) : cache_set('runtime', $runtime); } function runtime_truncate() { global $conf; 'mysql' == $conf['cache']['type'] ? website_set('runtime', '') : cache_delete('runtime'); } register_shutdown_function('runtime_save'); ?>Comments on future posts|Programmer puzzle solving
最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

Comments on future posts

matteradmin8PV0评论

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 badges
Add a comment  | 

1 Answer 1

Reset to default 1

You 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

});

Articles related to this article

Post a comment

comment list (0)

  1. No comments so far