首页 文章

在Woocommerce中制作动态Facebook OG

提问于
浏览
1

为了在每次我在Facebook上分享时拥有正确的图像和正确的链接,这就是我在Wordpress / Woocommerce Headers 上所做的:

<meta property="og:image" content="<?php the_post_thumbnail_url(); ?>" />
    <meta property="og:title" content="<?php echo the_title(); ?> by Pixel Komando" />
    <meta property="og:url" content="<?php echo get_permalink(); ?>" />

在我的woocommerce产品页面中一切正常,但是当我想分享Shop Page时,FB调试器会向我显示:

网址:https://www.pixelkomando.com/shop

元标记og:url https://www.pixelkomando.com/shop/CATEGORY/PRODUCT/

除了Shop Page本身之外,它似乎在任何地方都能正常工作 . 它不是检索商店页面URL,而是提供随机产品的URL .

我真的不知道出了什么问题 .

关心Fero

2 回答

  • 2

    由于它是一个存档页面,因此每当您调用 get_permalink() 时,它将选择最后一个或第一个产品URL,因此我建议您从 header.php 删除您的代码并在 functions.php 中添加以下代码

    function wh_doctype_opengraph($output) {
        return $output . '
    xmlns:og="http://opengraphprotocol.org/schema/"
    xmlns:fb="http://www.facebook.com/2008/fbml"';
    }
    
    add_filter('language_attributes', 'wh_doctype_opengraph');
    
    
    function wh_fb_opengraph()
    {
        global $post;
        if (is_home() && is_front_page())
        {
            ?>
            <meta property="og:type" content="website" />
            <meta property="og:title" content="<?= get_bloginfo('name') ?>"/>
            <meta property="og:url" content="<?= get_site_url() ?>"/>
            <meta property="og:image" content="<?= get_site_url() . '/wp-content/uploads/myhome.jpg' ?>"/> <!-- replace it with your static image-->
            <?php
        }
        //for singles post page
        else if (is_single() && !is_product())
        {
            if (has_post_thumbnail($post->ID))
            {
                $img_src = wp_get_attachment_url(get_post_thumbnail_id($post->ID), 'medium');
            }
            //if featured image not present
            else
            {
                $img_src = get_site_url() . '/wp-content/uploads/post.jpg'; //replace it with your static image
            }
            ?>
            <meta property="og:type" content="article" />
            <meta property="og:title" content="<?= get_the_title($post->ID); ?>"/>
            <meta property="og:url" content="<?= get_the_permalink($post->ID); ?>"/>
            <meta property="og:image" content="<?= $img_src; ?>"/>
            <?php
        }
        //for singles product page only
        elseif (is_product())
        {
            $img_url = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'woocommerce_single_image_width'); //replace it with your desired size
            ?>
            <meta property="og:type" content="product" />
            <meta property="og:title" content="<?= get_the_title($post->ID); ?> by Pixel Komando"/>
            <meta property="og:url" content="<?= get_the_permalink($post->ID); ?>" />
            <meta property="og:image" content="<?= $img_url[0]; ?>"/>
            <?php
        }
        //for product cat page
        else if (is_product_category())
        {
            $term = get_queried_object();
            $img_src = wp_get_attachment_url(get_woocommerce_term_meta($term->term_id, 'thumbnail_id', true));
            if (empty($img_src))
            {
                $img_src = get_site_url() . '/wp-content/uploads/myproductcat.jpg'; //replace it with your static image
            }
            ?>
            <meta property="og:type" content="object" />
            <meta property="og:title" content="<?= $term->name; ?>" />
            <meta property="og:url" content="<?= get_term_link($term->term_id, 'product_cat'); ?>" />
            <meta property="og:image" content="<?= $img_src; ?>" />
            <?php
        }
        //for shop page
        elseif (is_shop())
        {
            ?>
            <meta property="og:title" content="<?= $term->name; ?>" />
            <meta property="og:url" content="<?= get_permalink(woocommerce_get_page_id('shop')); ?>" />
            <meta property="og:image" content="<?= get_site_url(); ?>/wp-content/uploads/myshop.jpg" /> <!-- replace it with your static image-->
            <?php
        }
        else
        {
            return;
        }
    }
    
    add_action('wp_head', 'wh_fb_opengraph', 5);
    

    代码经过测试和运行 .

    希望这可以帮助!

  • 0

    好像问题出在你的og:url标签上 . 每次我用sharing debugger重新刮,都是不同的 . 对我来说,这表明 get_permalink() 方法没有返回一致的结果 .

    仅供参考, og:url 元标记不是必需的,因此这里的一个简单修复就是将其关闭 . 如果您有多个URL来访问相同的资源,并且您想让FB的爬虫(即URL)是规范的,那么您才真正需要它 .

相关问题