【问题标题】:Get permalink from SKU从 SKU 获取永久链接
【发布时间】:2019-08-06 09:36:06
【问题描述】:

我正在尝试进行反向查找以从其 SKU 获取产品的永久链接。其输出将用于将旧 URL 重定向到新 URL。

我无法理解 woocommerce 中使用的表之间的关系。产品似乎存储在 wp_posts 中,而 SKU 存储在 wp_wc_product_meta_lookup 中,但是在数据库表中创建连接时,这不会显示预期的数据:

SELECT pml.sku,pml.product_id,wpp.guid FROM wp_wc_product_meta_lookup pml LEFT JOIN wp_posts wpp ON wpp.ID=pml.product_id WHERE pml.stock_status='instock'

除此之外,wp_posts 中的 guid 与实际产品 URL 不同 - 类别不同。

谢谢,

瑞克

【问题讨论】:

  • SKU 存储在postmeta 表中 - meta_key => _sku。产品信息(它是 WordPress 帖子)存储在 posts 表中。

标签: mysql wordpress woocommerce


【解决方案1】:

您可以为此使用内置的 WooCommerce 功能 - wc_get_product_id_by_sku

例子:

<?php
echo get_permalink( wc_get_product_id_by_sku( 'SKU' ) );
?>

【讨论】:

    【解决方案2】:

    你是对的。产品帖子本身存储在wp_posts 中,但wp_wc_product_meta_lookup 实际上是一个参考表,用于加快网站上的某些查询。实际 SKU 存储在_skumeta_key 下的wp_postmeta 表中。这是获取产品 ID 和 SKU 的更新查询:

    SELECT wp_postmeta.meta_value as `sku`,
           wp_posts.ID as `product_id`
    FROM wp_posts
    INNER JOIN wp_postmeta 
           ON wp_posts.ID = wp_postmeta.post_id
    WHERE wp_posts.post_type LIKE 'product%'
    AND wp_postmeta.meta_key = '_sku'
    

    此外,您真的不应该使用 URL 的 GUID 列。 Wordpress 使用的 GUID 是一个伪造的唯一标识符,仅显示页面在其创建环境中的 URL。你最好创建一个脚本,通过get_permalink($post_id)为你生成永久链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2017-07-30
      • 2017-03-19
      • 1970-01-01
      相关资源
      最近更新 更多