Auto-Select Parent Category as Primary


I am using Yoast SEO Premium to handle the selection of Primary Categories. I am currently working with a Listing (listing) custom post type with a hierarchal taxonomy of Listing Category (listing_cat). I need the topmost parent to be auto-selected as the Primary Category on Publish or Edit.

The code I have tried is below. It auto-selects the parent item as a category when its child category is selected, but I need to take it a step further. I feel I am close, but missing something.

/* Auto Select Listing Parent Category on Child Category Select */

add_action('save_post', 'am_assign_listing_parent_terms', 10, 2);

function am_assign_listing_parent_terms($post_id, $post){

    if($post->post_type != 'listing')
        return $post_id;

    // get all assigned terms   
    $terms = wp_get_post_terms($post_id, 'listing_cat' );
    foreach($terms as $term){
        while($term->parent != 0 && !has_term( $term->parent, 'listing_cat', $post )){
            // move upward until we get to 0 level terms
            wp_set_post_terms($post_id, array($term->parent), 'listing_cat', true);
            $term = get_term($term->parent, 'listing_cat');
            // Update Yoast SEO Post Meta with Primary Category

add_action( 'save_post', 'set_primary_on_publish', 10, 2 );
add_action( 'edit', 'set_primary_on_publish', 10, 2 );
add_action( 'wp_insert_post', 'set_primary_on_publish', 10, 2 );

I have referenced this article: Set Primary category using the Yoast SEO plugin – but I need the exact opposite of what it does.

Any help is appreciated.

, , , Jesse Messenger 3 years 2019-11-01T23:22:43-05:00 0 Answers 216 views 0

Leave an answer