[wp-hackers] Separate Comments of Custom Post Type

Baki Goxhaj banago at gmail.com
Sun Aug 8 10:10:17 UTC 2010


Paul thanks very much indeed - I'm going to try that now.

Kindly,

Baki Goxhaj
www.wplancer.com | www.banago.info | www.lintuts.com


On 7 August 2010 22:12, Paul <paul at codehooligans.com> wrote:

> Freakin Awesome Mike!
>
> P-
>
> On Aug 7, 2010, at 3:40 PM, Mike Schinkel wrote:
>
> > On Aug 7, 2010, at 2:30 PM, Paul wrote:
> >> So at this point you have a new nav item on your post type menu. The nav
> item when clicked will call 'product_comments_menu function'. Here is where
> things get sort of ugly. As far as I can tell there is no easy way to filter
> the comments by post_type. For example I would expect there to be some
> method to filter the WHERE clause of the comments query. Nothing. Take a
> look at the /wp-admin/edit-comments.php code. you will basically want to
> copy most of this code into your version of 'product_comments_menu'
> function.
> >
> > Actually, the following works (and the code below is packaged as a plugin
> here: http://gist.github.com/513084):
> >
> > add_action('query', 'hook_to_filter_comment_admin_by_post_type');
> > function hook_to_filter_comment_admin_by_post_type($sql) {
> >       global $pagenow;
> >       if ($pagenow=='edit-comments.php' &&
> >                       !empty($_GET['post_type']) &&
> >                       post_type_exists($_GET['post_type']) &&
> >                       preg_match('#^SELECT \* FROM wp_comments c#',$sql))
> {
> >               $sql = str_replace(' WHERE '," WHERE
> p.post_type='{$_GET['post_type']}' AND ",$sql);
> >       }
> >       return $sql;
> > }
> >
> > Of course modifying the $sql works in most cases but occasionally it
> conflicts with another hook so while using the above in the short term he
> could create a trac ticket to lobby for adding post_type filtering into
> edit-comments.php or at the very least ask for a filter on the return value
> of _wp_get_comment_list().
> >
> > With the above hook Baki can simply pass the "post_type" on the
> edit-comments.php when setting up his admin menu as you described instead of
> creating a "product_comments_menu" function like so:
> >
> > http://example.com/wp-admin/edit-comments.php?post_type=movie
> >
> > Here's the hook to add a "Comments" menu option to each post type's admin
> menu:
> >
> > add_action('admin_menu',
> 'hook_to_add_comment_admin_menu_option_for_each_post_type');
> > function hook_to_add_comment_admin_menu_option_for_each_post_type() {
> >       $post_types =
> apply_filters('comment_admin_menu_post_types',get_post_types(array('public'=>true,'show_ui'=>true)));
> >       foreach($post_types as $post_type) {
> >               if ($post_type!='post') // Don't do for Posts, they already
> gota one!
> >
> add_submenu_page("edit.php?post_type={$post_type}",__('Comments'),__('Comments'),'moderate_comments',"edit-comments.php?post_type={$post_type}"
> );
> >       }
> > }
> >
> > Note that it adds it's own filter "comment_admin_menu_post_types" so that
> someone using this can control via the hook in their own theme's function
> which post types get admin menus for Comments.  So if the two post_types you
> want comments for are "Movie" and "Actor" then this stored in the theme's
> functions.php file would cause only the menus for those post types to get a
> Comment option:
> >
> > add_action('comment_admin_menu_post_types',
> 'my_comment_admin_menu_post_types');
> > function my_comment_admin_menu_post_types($post_types) {
> >       return array('movie','actor');
> > }
> >
> > Again, here it is as a plugin:
> >
> > http://gist.github.com/513084
> >
> > Hope this helps.
> >
> >
> > -Mike
> >
> > _______________________________________________
> > wp-hackers mailing list
> > wp-hackers at lists.automattic.com
> > http://lists.automattic.com/mailman/listinfo/wp-hackers
>
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers
>


More information about the wp-hackers mailing list