显示父类别而不是第一类 - Wordpress

I have inherited a website and the code I currently have seems to display the first category, judged by alphabetical order I think, on the post loop of a custom post...

I have this code that's pulling through category name and the title of the post:

class SeedPost {

    public $post_id;
    public $post_type;

    function __construct($post_id) {
        $this->post_id = $post_id;
        $this->post_type = get_post_type($this->post_id);
    }

    function display($twocol = false) {
        global $post;

        $post = get_post($this->post_id);

        $cols = $twocol ? 'two' : 'three';

        setup_postdata($post);

        if($this->post_type == 'portfolio') {
            $overlay_class = 'item__overlay--portfolio';
        } else {
            $overlay_class = 'item--cat-' . SeedHelpers::first_category();
        }
        ?>
        <a href="<?php the_permalink(); ?>">
        <div class="item item--<?php echo $cols; ?>">
            <?php
            if(has_post_thumbnail()) {
                the_post_thumbnail('news-archive', array('class' => 'item--three__child'));
            }
            ?>

                <div class="item__overlay <?php echo $overlay_class; ?>">
                    <span class="item__cat-title item__cat-title--overlay"><?php echo SeedHelpers::first_category($this->post_type); ?></span>
                    <?php get_cat_name( $cat_id ) ?>
                    <h4 class="item__title"><?php the_title(); ?></h4>
                    <!--    <?php the_excerpt(); ?> -->
                    </div>
                </div>

        </div>
        </a>
        <?php
        wp_reset_postdata();
    }

The bit of code you will notice is:

SeedHelpers::first_category($this->post_type)

This relates to a function, I believe, that will display the first of the category assigned to this post.

This function is here:

static function first_category($post_type = 'post') {
        if($post_type == 'post') {
            $category = get_the_category();

            if($category) {
                return $category[0]->cat_name;
            }

            return false;
        } elseif($post_type == 'portfolio') {
            $category = get_the_terms(get_the_ID(), 'portfolio-category');

            if($category) {
                return $category[0]->name;
            }

            return false;
        }
    }

Each of my posts have one main category and multiple child categories, I would like to alter the code so it shows the parent sub category only...

I have tried most things I have found online but I can't seem to make it display properly...

EDIT >>>>>>>> I also have this bit of code underneath the bit above - not sure if this has anything to do with it?

static function category_shorthand() {
        $category = get_the_terms(get_the_ID(), 'portfolio-category');

        if($category) {
            $category_id = $category[0]->term_id;
            $shorthand = get_field('shorthand', 'portfolio-category_' . $category_id);

            if($shorthand) {
                return $shorthand;
            }

            return $category[0]->name;
        }

        return false;
    }

The site is here: http://ideedev.co.uk/newseed/portfolio/ and displays the category in the rollover boxed on a portfolio item...

As far as I read the documentation, get_the_category should return an Array of WP_Term objects, which contain a public variable called parent (which contain the ID of the parent).

Guess you should be able to use that variable to get the parent category name, by calling the method get_the_category_by_ID() with the parent ID as parameter. So you'll get:

if($category) {
    $parentId = $category[0]->parent; // contains the parent category ID
    return get_the_category_by_ID($parentId); // Returns the name of the category
}

instead of

if($category) {
    return $category[0]->cat_name;
}

Docs: