WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Как добавить комментарий в запланированный (Scheduled) пост

При создании запланированных постов, а их более 100, на некоторые нужно добавить комментарий от автора с неким описанием или с линком: вордпресс не дает добавить коммент посту со статусом Scheduled, как обойти данное ограничение?

Пока что публикую запись, добавляю коммент, и потом переношу дату в запланированные посты, но это очень много времени и сил отнимает.

--

Решил пока через код в интернете:

    /***[000] Allow comments on scheduled posts */
		// sources
		// https://www.bouk.info/allow-comments-scheduled-posts/
		// https://wordpress.stackexchange.com/questions/180012/comments-on-future-posts
			function my_publish_comment( $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.') );
				}

				$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).') );
				elseif ( !is_email($comment_author_email))
						wp_die( __('<strong>ERROR</strong>: please enter a valid email address.') );
				}

				if ( '' == $comment_content )
					wp_die( __('<strong>ERROR</strong>: please type a comment.') );

				$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 );
				$comment = get_comment($comment_id);

				do_action( 'set_comment_cookies', $comment, $user );

				if ( $user->exists() ) {
					wp_set_comment_status( $comment_id, 'approve' );
				}

				$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;

				$location = apply_filters( 'comment_post_redirect', $location, $comment );

				wp_safe_redirect( $location );
				exit;
			}
			add_action( 'comment_on_draft', 'my_publish_comment' );
Заметки к вопросу:
Kama 3.2 года назад

А что пишет ВП? Ошибку покажи чтобы быстрее разобраться.

kolshix 3.2 года назад

в html

<title>Comment Submission Failure</title>

в тексте на странице

Sorry, comments are not allowed for this item.

Подозреваю что просто ограничение где-то автоматически в вордпрессе выставлено

0
kolshix
3.2 года назад 779
  • 0
    Kama9601

    Мда, решение прямо скажем не изящное в интернете smile

    Вот вариант получше, хотя и тоже не особо хорош, но под это дело подходящих хуков я не нашел, поэтому так:

    add_filter( 'get_post_status', 'allow_post_on_draft_comment' );
    
    /**
     * Разрешает комментировать записи со статусом draft. Функция для хука `get_post_status`.
     *
     * @version 2.0
     *
     * @param $status
     *
     * @return string
     */
    function allow_post_on_draft_comment( $status ){
    
    	$funcs_names = [
    		// чтобы можно было оставить коммент
    		'wp_handle_comment_submission',
    		// чтобы отображался метабокс комментариев
    		'register_and_do_post_meta_boxes'
    	];
    
    	// вариант: универсальнео решение (работает очень быстро)
    	foreach( debug_backtrace() as $data ){
    
    		if( isset( $data['function'] ) && in_array( $data['function'], $funcs_names, 1 ) ){
    			return 'publish';
    		}
    	}
    
    	return $status;
    }
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация