Excluir post_type de admin comments_list

2

Intento no mostrar los comentarios de un determinado tipo de publicación personalizada en la lista de comentarios en la interfaz de administración.

Fui a "wp-admin / includes / class-wp-comments-list-table.php" e intenté jugar con la matriz $ args que se pasa a la función "get_comments" para alimentar los comentarios lista de tablas.

Si agrego un parámetro post_type allí, puedo filtrar los comentarios para ver solo los comentarios de ese tipo de publicación. Pero lo que quiero es lo contrario: me gustaría ver todos los comentarios, excepto los de un tipo de publicación específica.

Probé varias cosas como:

1) cree una lista blanca agregando todos los tipos de publicación que necesito, pero el que quiero excluir. El problema es que solo muestra el primer tipo de la matriz

$args = array(
    ...,
    'post_type' => array('aaa','bbb','ccc','ddd')
);

2) Intenté crear una lista negra excluyendo el tipo de publicación que necesito. Simplemente no tiene en cuenta el filtro y muestra los comentarios de todos los tipos de publicaciones.

$args = array(
    ...,
    'exclude' => array('post_type'=>'xxx')
);

//OR 

$posts_to_exclude=get_posts(array('post_type'=> 'xxx'));
foreach ($posts_to_exclude as $single)
{
    $target[] = $single->ID;   
};
$args = array(
    ...,
    'posts__not_in' => $target
);

Nada funcionó. Simplemente no sé qué más hacer. Lo que me preocupa es que la lista blanca parece estar bien de acuerdo con lo que puedo leer en Internet, pero por alguna razón solo me muestra el primer elemento de la matriz post_type (y estoy seguro de que tengo comentarios para todas las publicaciones, ya que todos aparecen cuando no filtro la tabla de la lista de comentarios.

Gracias por su ayuda.

    
pregunta Bachir Messaouri 11.11.2012 - 15:31

1 respuesta

5

Necesitarás filtrar comments_clauses , ya que WP_Comment_Query solo admite un argumento limitado post type == X .

/**
 * Exclude comments of the "foobar" post type.
 *
 * @param  array  $clauses
 * @param  object $wp_comment_query
 * @return array
 */
function wpse_72210_comments_exclude_post_type( $clauses, $wp_comment_query )
{
    global $wpdb;

    if ( ! $clauses['join'] )
        $clauses['join'] = "JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->comments.comment_post_ID";

    if ( ! $wp_comment_query->query_vars['post_type' ] ) // only apply if post_type hasn't already been queried
        $clauses['where'] .= $wpdb->prepare( " AND {$wpdb->posts}.post_type != %s", 'foobar' );

    return $clauses;
}

/**
 * Delay hooking our clauses filter to ensure it's only applied when needed.
 */
function wpse_72210_comments_exclude_lazy_hook( $screen )
{
    if ( $screen->id == 'edit-comments' )
        add_filter( 'comments_clauses', 'wpse_72210_comments_exclude_post_type', 10, 2 );
}

add_action( 'current_screen', 'wpse_72210_comments_exclude_lazy_hook', 10, 2 );
    
respondido por el TheDeadMedic 11.11.2012 - 17:37

Lea otras preguntas en las etiquetas