Intereting Posts

Как включить комментарии для ожидающих и проектов сообщений?

У меня есть настраиваемый тип сообщений с включенными комментариями. Комментарии metox в admin появляются только при публикации публикации. Я хочу использовать систему комментариев как более дискуссию между определенными авторами (она будет скрыта в интерфейсе), поэтому я бы хотел, чтобы система комментариев была активной, когда сообщения были черновиками, ожидающими или опубликованными. Это возможно?

Я должен отметить, что я пробовал плагин редактирования потока, который имеет функцию «редакционных комментариев», однако он вводит больше проблем с возможностями и т. Д. И не подходит для того, что я пытаюсь достичь.

Solutions Collecting From Web of "Как включить комментарии для ожидающих и проектов сообщений?"

Ниже приведено метаданные по умолчанию для draft и pending сообщений (в portfolio post_type ):

 add_action( 'admin_init', 'wpse_74018_enable_draft_comments' ); /** * Add Comments Meta Box if CPT is 'draft' or 'pending' */ function wpse_74018_enable_draft_comments() { if( isset( $_GET['post'] ) ) { $post_id = absint( $_GET['post'] ); $post = get_post( $post_id ); if ( 'draft' == $post->post_status || 'pending' == $post->post_status ) add_meta_box( 'commentsdiv', __('Comments'), 'post_comment_meta_box', 'portfolio', // CHANGE FOR YOUR CPT 'normal', 'core' ); } } 

Но мы не можем комментировать … ошибка комментирования проекта сообщения

Ошибка возникает в /wp-admin/includes/ajax-actions.php , строка 736:


Чтобы исправить это, вызов Ajax должен быть перехвачен с помощью:

 add_action( 'admin_init', 'wpse_74018_enable_custom_ajax_comments' ); function wpse_74018_enable_custom_ajax_comments() { add_action( 'wp_ajax_replyto-comment', 'wpse_74018_custom_callback', 0 ); } /** * Copy of wp_ajax_replyto_comment() * /wp-admin/includes/ajax-actions.php * * Adjust the CPT that defines $diff_status */ function wpse_74018_custom_callback( $action ) { global $wp_list_table, $wpdb; if ( empty( $action ) ) $action = 'replyto-comment'; check_ajax_referer( $action, '_ajax_nonce-replyto-comment' ); set_current_screen( 'edit-comments' ); $comment_post_ID = (int) $_POST['comment_post_ID']; if ( !current_user_can( 'edit_post', $comment_post_ID ) ) wp_die( -1 ); $status = $wpdb->get_var( $wpdb->prepare("SELECT post_status FROM $wpdb->posts WHERE ID = %d", $comment_post_ID) ); if( 'portfolio' == get_post_type( $comment_post_ID ) ) $diff_status = array('trash'); else $diff_status = array('draft','pending','trash'); if ( empty($status) ) wp_die( 1 ); elseif ( in_array($status, $diff_status ) ) wp_die( __('ERROR: you are replying to a comment on a draft post.') ); $user = wp_get_current_user(); if ( $user->exists() ) { $user_ID = $user->ID; $comment_author = $wpdb->escape($user->display_name); $comment_author_email = $wpdb->escape($user->user_email); $comment_author_url = $wpdb->escape($user->user_url); $comment_content = trim($_POST['content']); if ( current_user_can( 'unfiltered_html' ) ) { if ( wp_create_nonce( 'unfiltered-html-comment' ) != $_POST['_wp_unfiltered_html_comment'] ) { kses_remove_filters(); // start with a clean slate kses_init_filters(); // set up the filters } } } else { wp_die( __( 'Sorry, you must be logged in to reply to a comment.' ) ); } if ( '' == $comment_content ) wp_die( __( 'ERROR: please type a comment.' ) ); $comment_parent = absint($_POST['comment_ID']); $comment_auto_approved = false; $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); if ( ! $comment ) wp_die( 1 ); $position = ( isset($_POST['position']) && (int) $_POST['position'] ) ? (int) $_POST['position'] : '-1'; // automatically approve parent comment if ( !empty($_POST['approve_parent']) ) { $parent = get_comment( $comment_parent ); if ( $parent && $parent->comment_approved === '0' && $parent->comment_post_ID == $comment_post_ID ) { if ( wp_set_comment_status( $parent->comment_ID, 'approve' ) ) $comment_auto_approved = true; } } ob_start(); if ( 'dashboard' == $_REQUEST['mode'] ) { require_once( ABSPATH . 'wp-admin/includes/dashboard.php' ); _wp_dashboard_recent_comments_row( $comment ); } else { if ( 'single' == $_REQUEST['mode'] ) { $wp_list_table = _get_list_table('WP_Post_Comments_List_Table'); } else { $wp_list_table = _get_list_table('WP_Comments_List_Table'); } $wp_list_table->single_row( $comment ); } $comment_list_item = ob_get_contents(); ob_end_clean(); $response = array( 'what' => 'comment', 'id' => $comment->comment_ID, 'data' => $comment_list_item, 'position' => $position ); if ( $comment_auto_approved ) $response['supplemental'] = array( 'parent_approved' => $parent->comment_ID ); $x = new WP_Ajax_Response(); $x->add( $response ); $x->send(); } 

альтернативы

Редакционно я понимаю, что система комментариев и интерфейс будут намного лучше. Альтернативой является создание настраиваемого мета-поля с повторяемыми полями, где сообщения могут быть оставлены в сообщении.

Основная реализация :

  • Повторяющиеся пользовательские поля в Metabox
  • Повторяющийся мета-бокс

Интересные плагины :

  • Менеджер настраиваемых типов контента
  • Расширенные пользовательские поля

Дальнейшие разработки

Я пошел вперед и сделал плагин с большим количеством функций.
Kudos @toscho, который указал точку входа в запросе Ajax.

Комментарии к программе CPT
Включает внутренние комментарии для заданного типа пользовательской публикации при редактировании черновиков или ожидающих сообщений. Комментарии видны только в бэкэнд. И помечено как внутреннее в приборной панели.