I am looking for a filter to define what image on a post sets the facebook OG image. In my case I have the image I want to use in a post meta field.

I have looked around but am unsure of the best way to handle this. Is there a core wordpress filter for this? If so I could not find one.

One solution that I looked into was through modifying the yoast seo plugin filters since we do have that plugin on our site. By default it looks to put the OG meta on the featured image which is not what I am looking for.

  • Yes, it's there: wpseo_opengraph_image. Are you definitely getting a different og:image tag? Can you try adding the filter earlier in the page load lifecycle, e.g. in a plugin not your theme? (I don't think that should be necessary though) – Rup Feb 26 '15 at 9:46
  • "the image lives else where in the meta data" - if I'm reading it right, it'll also use metadata key _yoast_wpseo_opengraph-image - see image() in the same file - to pick the image. But I've only skimmed class-wpseo-meta very carefully, that might be the wrong name. – Rup Feb 26 '15 at 9:51
  • Please, do not misuse moderator flags. Now you have a risen flag against yourself. Not good. Just file an edit and the system will cast a reopen vote. If the vote goes through, your question will get reopened, etc. – kaiser Feb 26 '15 at 18:29
  • @kaiser Sorry did not know that! – Shawn Feb 26 '15 at 19:50
  • @Rup I added it to functions.php but also into a mu plugin function. It is not working. – Shawn Feb 27 '15 at 17:15

The wpseo_opengraph_image filter can only be used to modify the existing og:image. Otherwise, you will need to hook into the wpseo_opengraph action to add a different image.

Here's an example of adding an image from a custom field on the post object (assuming you're using ACF here).

function my_wpseo_opengraph() {
    global $post;

    if (isset($post)) {
        $og_image = get_field('your_field_name', $post->ID);
        if ($og_image) {
            $image_url = $og_image['sizes']['large'];

add_action('wpseo_opengraph', 'my_wpseo_opengraph', 29);
  • 1
    It looks like you can grab it using the get_post_meta() if you have it in a basic custom field and don't have ACF, as long as you are setting the global wpseo_og parameter? – Shawn Feb 11 '16 at 16:14
  • 3
    Yep! $GLOBALS['wpseo_og']->image_output($image_url); is the only important part... The rest was just for context. – smilly92 Feb 12 '16 at 1:25
  • Thanks a lot @smilly92 – Suraj Rathod Jul 2 '20 at 12:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.