WordPress.org

Ready to get started?Download WordPress

Forums

Get Recent Comments
[resolved] Filtering categories -- error in code? (1 post)

  1. drodrig
    Member
    Posted 2 years ago #

    Hi. I've used your plugin for some time -- thank you!

    The reason I write is I *think* I found a bug in your code. I could very well be mistaken, as I am by no means a WordPress expert.

    At any rate, I was having a problem where the comments from the most recently added categories in my blog where not being displayed, even though I had the categories selected on the "Categories" configuration page. I troubleshooted the problem down to a block of code in get-recent-comments.php (starting line is 1121):

    The original code:

    if ($missing_post != NULL)
             {
                unset($comma_separated);
                $comma_separated = implode(",", array_keys($missing_post));
                if (empty($wpdb->term_relationships)) {
                    $query = "SELECT * from $wpdb->posts JOIN $wpdb->post2cat ON ID = post_id WHERE ID IN ($comma_separated);";
                } else {
                    $query = "SELECT * from $wpdb->posts JOIN $wpdb->term_relationships ON ($wpdb->term_relationships.object_id=ID)  WHERE ID IN ($comma_separated);";
                }
                // echo "$query<br>";
                $posts = $wpdb->get_results($query);
                foreach ($posts as $post) {
                    // echo "p: $post->ID ";
                    $post_cache[$post->ID] = $post;
                    if (empty($wpdb->term_relationships)) {
                        $cat_cache[$post->ID][$post->category_id] = 1;
                    } else {
                        $cat_cache[$post->ID][$post->term_taxonomy_id] = 1;
                    }
                }
            }

    I think the problem was that the category id(s) of each post were being determined (incorrectly) by grabbing the term_taxonomy_ids from the above query. Unless I am mistaken (which is always a fair bet :-), in the terms_taxonomy table, when taxonomy="category", the term_id and not the term_taxonomy_id is the correct number to use for the category id.

    However, rather than test my theory by changing the SQL, I refactored the code as follows:

    if ($missing_post != NULL)
            {
                unset($comma_separated);
                $comma_separated = implode(",", array_keys($missing_post));
                // Some code refactoring. See get-recent-comments.org for original. --DR
                $posts = get_posts('include=' . $comma_separated);
                foreach ($posts as $p) {
                    $post_cache[$p->ID] = $p;
                    $cats = get_the_category($p->ID);
                    foreach ($cats as $c) {
                        $cat_cache[$p->ID][$c->cat_ID] = 1;
                    }
                }
            }

    This way I didn't need to get my hands dirty with the any SQL. The selected categories are displaying recent comments and if I uncheck a category in the config interface, the comments stop showing up, as expected. I didn't test the reverse (skip selected categories), as I don't use that option.

    I hope this helps and again, thanks for the plugin, it's come in very handy.

    http://wordpress.org/extend/plugins/get-recent-comments/

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic