Sau đây cho phép hộp meta mặc định cho draft
và pending
bài viết (trong 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'
);
}
}
Nhưng, chúng tôi không thể bình luận ...
Lỗi được tạo ra /wp-admin/includes/ajax-actions.php
, dòng 736:
Để sửa lỗi này, lệnh gọi Ajax phải bị chặn:
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();
}
Lựa chọn thay thế
Về mặt biên tập, tôi hiểu rằng hệ thống bình luận và giao diện sẽ tốt hơn nhiều. Một cách khác là tạo một hộp meta tùy chỉnh với các trường có thể lặp lại, trong đó các tin nhắn có thể được để lại trong bài viết.
Thực hiện cơ bản :
Plugin quan tâm :
Sự phát triển xa hơn
Tôi đã đi trước và tạo ra một plugin với nhiều tính năng hơn.
Kudos @toscho, đã chỉ ra một điểm vào trong truy vấn Ajax.
Nhận xét riêng tư cho CPT
Cho phép nhận xét nội bộ cho Loại bài đăng tùy chỉnh nhất định khi Chỉnh sửa bài viết nháp hoặc đang chờ xử lý. Các ý kiến chỉ được nhìn thấy trong phần phụ trợ. Và được đánh dấu là nội bộ trong bảng điều khiển.