Site logo

[Resolved] show just primary category on meta-entry-items

Home Forums Support [Resolved] show just primary category on meta-entry-items

Home Forums Support show just primary category on meta-entry-items

Viewing 12 posts - 1 through 12 (of 12 total)
  • Author
    Posts
  • #2446523
    Mi

    Hello,

    I am looking for a way to show only the primary category on the meta-entry-items on main page and archive pages instead of all categories (single page/blogpost should stay the same).

    Here:

    
    add_filter( 'generate_header_entry_meta_items', function() {
        return array(
            'date',
           'categories',
        );
    } );

    The breadcrumbs use a primary-caterory funktion, but I can´t find, how they do it ^^’

    I tried this https://generatepress.com/forums/topic/showing-only-one-primary-category/#post-1136469 but nothing happened.

    I hope you can help me!
    Thank you 🙂

    #2447000
    David
    Staff
    Customer Support

    Hi there,

    are you using RankMath on your site ?

    #2447030
    Mi

    Is it a plugin? Then no.

    #2447822
    David
    Staff
    Customer Support

    So that code requires RankMath SEO plugin, are you using any SEO plugin eg. Yoast ?

    #2447851
    Mi

    Yes, I am using Yoast. I really thought the primary-category is a wordpress thing? Never thought that it is just a feature from another plugin! 😮

    #2450016
    David
    Staff
    Customer Support

    Yeah, its a plugin thing.
    And its complicated. See here where Tom originally created a shortcode to display a Primary Category if one existed, if not it displays the firsst term.

    I tweaked that code to work with the Themes post meta. Try this PHP Snippet:

    
    add_filter('generate_category_list_output', 'dynamic_category_link_function');
    function dynamic_category_link_function($category){
        if ( 'post' !== get_post_type() ) {
    	return;
        }
        $categories = get_the_category();
        $category_link = '';
    	
        if ( class_exists('WPSEO_Primary_Term') ) {
            // Show the post's 'Primary' category, if this Yoast feature is available, & one is set
            $wpseo_primary_term = new WPSEO_Primary_Term( 'category', get_the_id() );
            $wpseo_primary_term = $wpseo_primary_term->get_primary_term();
            $term = get_term( $wpseo_primary_term );
    
            if ( is_wp_error( $term ) ) {
                // Default to first category (not Yoast) if an error is returned
                $category_link = get_category_link( $categories[0]->term_id );
                $term_name = get_term( $categories[0]->term_id  )->name;
            } else {
                // Yoast Primary category
                $category_link = get_category_link( $term->term_id );
                $term_name = get_term( $term->term_id )->name;
            }
        } else {
            // Default, display the first category in WP's list of assigned categories
            $category_link = get_category_link( $categories[0]->term_id );
            $term_name = get_term( $categories[0]->term_id  )->name;
        }
    
        return sprintf(
            '<span class="cat-links">%1$s<span class="screen-reader-text">%2$s</span>
            <a href="%3$s" rel="category tag">%4$s</a>
            </span> ',
            apply_filters( 'generate_inside_post_meta_item_output', '', 'categories' ),
            esc_html_x( 'Categories', 'Used before category names.', 'generatepress' ),
            $category_link,
            $term_name
        );
    }
    #2450197
    Mi

    Uh, yes, that looks complicated ^^’ But it works like a charm! Thank you!
    I see it right, that it replaces the categories everywhere, right? So I do not have the chance to show all categories at one point and just the primary at an other? And it´s not working in combination with “add taxonomy to pages” …

    I have to think about then, what is more important ^^`

    But thank you a lot for your help!

    #2450457
    David
    Staff
    Customer Support

    So here in the code, we set a get out clause. ie. if its NOT a POST, eg. its a Page or other post type. then just return the standard categories:

    if ( 'post' !== get_post_type() ) {
    	return;
    }

    for example you could change this to:

    if ( 'post' !== get_post_type() || is_single() ) {
    	return;
    }

    And this would mean it would show the regular categories on a single post. So now only archives showing the post post type will show just the primary category.

    Let us know where you want to show primary and where you want to show ALL categories and we can help with the code.

    #2450743
    Mi

    I believe I was thinking about this the wrong way. It´s really a bit complicated, and I don´t know if the effort is worth it. Maybe I will just keep it the way it is now.
    As I understand the code, it means that it changes the function(? don´t know if function is the right word here ^^’) of the category-function itself? I thought, that there would be a way to just write “show all categories here” and “show just primary category there”.

    What I was looking for is this:

    This is an archive page. It contains posts and pages, which has this category. Under the title it says “date + categories” and it says that for all types – pages and posts. Under the preview follows the list off categories in the taxonomies again.
    archive page

    I was hoping to just show the primary category under the title (date + primary-category) – and keep all categories as a “link-list” below.

    And when I go on the single-post-view
    Post view
    it keeps the list with all categories under the title again.

    I don´t know if I can explain it good enough ^^ And I don´t think that it is worth so much effort. I though I would just write “primary-category” instead of “categories” in my meta-entry-items and thats all ^^’ Just a little change, no such a big thing 😀

    Edit: And when I add your code, it doesn´t show the complete categories anymore. Then there is just the primary category for the posts. And for the pages, the place near the date and the whole taxonomy below is empty.

    #2451341
    David
    Staff
    Customer Support

    Ok, instead use the original code Tom provided here:

    https://generatepress.com/forums/topic/category-link-issue-on-gp-element/page/2/#post-1761111

    This will create the a shortcode: [dynamic_category_link]

    The in appearance > Elements, create a new Hook Element.
    In the text area add the shortcode.
    Set the Hook to generate_after_entry_title
    Check the Execute Shortcodes
    Set the Display Rules to Blog and All Archives

    This should not break anything 🙂 And just return the primary category after the first Date

    #2451765
    Mi

    Ok, I´m totally confused now.

    I tried this, and it adds just the link adress to my primary-category unter the other categories beneath the date, not a link itself.
    And it works just on the main page, not in the archives.

    I deleted the code and the hook and now my “taxonomy for pages” isn´t working anymore in all archives which contains just pages no posts …

    I thank you so much for your kind and patient help, but I will stop this now and fokus on the more important things.

    Thank you!

    #2452738
    David
    Staff
    Customer Support

    Yeah sorry in couldn’t make that work.
    If you have time to revisit in the future then let us know 🙂

Viewing 12 posts - 1 through 12 (of 12 total)
  • You must be logged in to reply to this topic.