How to remove Author Tag from being visible in Discord's previews?
Asked Answered
E

4

8

When sharing a post to Discord, the preview Discord generates shows the author name and URL. We removed all information about the author but it didn't stop the author tag from showing.

Image here

Enharmonic answered 6/3, 2019 at 8:15 Comment(0)
F
17

That’s done via oEmbed. Add below code in your functions.php file

add_filter( 'oembed_response_data', 'disable_embeds_filter_oembed_response_data_' );
function disable_embeds_filter_oembed_response_data_( $data ) {
    unset($data['author_url']);
    unset($data['author_name']);
    return $data;
}

**disorc may have stored the response in cache so create new post or page and test that **

Frighten answered 6/3, 2019 at 8:30 Comment(3)
Please add some explanation to your answer such that others can learn from itMayence
this is a very consise way to fix the issue. Just adding this to the top of this file /wp-includes/default-filters.php under the first comment (the part that ends with */) fixes the issue.Carroty
@Carroty Never modify core WordPress files, changes you make there will be removed upon update. All changes should go in your theme's functions.php file (if you are the theme maker), or inside of child theme's functions.php file (if using premade theme), for the same reason.Outsell
J
3

@hrak has the right idea but his answer lacks context for those of us not used to dealing with PHP.

What I ended up doing was check if there was already a filter for 'oembed_response_data' in /wp-includes/default-filters.php. Mine looked like this:

add_filter( 'oembed_response_data', 'get_oembed_response_data_rich', 10, 4 );

Add the previous line to the specified file if, for whatever reason, it isn't there already.

Afterward, I checked in wp-includes/embed.php for the get_oembed_response_data_rich function, which looked like this:

function get_oembed_response_data_rich( $data, $post, $width, $height ) {
    $data['width']  = absint( $width );
    $data['height'] = absint( $height );
    $data['type']   = 'rich';
    $data['html']   = get_post_embed_html( $width, $height, $post );

    // Add post thumbnail to response if available.
    $thumbnail_id = false;

    if ( has_post_thumbnail( $post->ID ) ) {
        $thumbnail_id = get_post_thumbnail_id( $post->ID );
    }

    if ( 'attachment' === get_post_type( $post ) ) {
        if ( wp_attachment_is_image( $post ) ) {
            $thumbnail_id = $post->ID;
        } elseif ( wp_attachment_is( 'video', $post ) ) {
            $thumbnail_id = get_post_thumbnail_id( $post );
            $data['type'] = 'video';
        }
    }

    if ( $thumbnail_id ) {
        list( $thumbnail_url, $thumbnail_width, $thumbnail_height ) = wp_get_attachment_image_src( $thumbnail_id, array( $width, 99999 ) );
        $data['thumbnail_url']                                      = $thumbnail_url;
        $data['thumbnail_width']                                    = $thumbnail_width;
        $data['thumbnail_height']                                   = $thumbnail_height;
    }

    return $data;
}

I just added the two lines of code that @hrak introduced in his answer to remove the author tag (name and URL) from $data before it was returned:

function get_oembed_response_data_rich( $data, $post, $width, $height ) {

    (...)

    if ( $thumbnail_id ) {
        list( $thumbnail_url, $thumbnail_width, $thumbnail_height ) = wp_get_attachment_image_src( $thumbnail_id, array( $width, 99999 ) );
        $data['thumbnail_url']                                      = $thumbnail_url;
        $data['thumbnail_width']                                    = $thumbnail_width;
        $data['thumbnail_height']                                   = $thumbnail_height;
    }

    unset($data['author_url']);
    unset($data['author_name']);

    return $data;
}

As before, add the get_oembed_response_data_rich function if it does not already exist. After about 5-10 minutes, Discord link embeds stopped showing the author tag.

Source:

Jolo answered 11/6, 2019 at 15:28 Comment(1)
This file will be overwritten with every WordPres update I believe.Vinni
C
1

I want to reiterate that hrak's answer is the right one:

add_filter( 'oembed_response_data', 
'disable_embeds_filter_oembed_response_data_' );
function disable_embeds_filter_oembed_response_data_( $data ) {
    unset($data['author_url']);
    unset($data['author_name']);
    return $data;
}

But you don't have to touch any of your back-end files, not even functions.php. Install the Code Snippets plugin (which you should add by default on any Wordpress site you're running) and add the code as a snippet there. This ensures that you don't have to worry about later updates to Wordpress, or your theme, unseating your code, and also makes sure you have can do it even if you don't have FTP access to the install's back-end. You can choose to run it sitewide, or only on certain post types, when you do it via Code Snippets, so that's a definite advantage. I had been tearing my hair out trying to find this solution, so I'm incredibly happy with it.

Again, all credit to hrak for the code. I just wanted to add on an easier way to deploy it for people who are leery of digging into their back-end files, or don't have access to them.

Cascio answered 13/1 at 16:54 Comment(0)
R
0

I've done this by emptying the posted_by function like this article shows, in the "Use Code to Remove the Author Name" section

https://wpdatatables.com/how-to-hide-the-author-in-wordpress/

basically find the posted_by function and empty it

function twentynineteen_posted_by() {

}

endif;
Recondition answered 12/8, 2021 at 17:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.