在自定义的WooCommerce /插件过滤器中获取产品ID

时间:2020-03-21 10:05:10

标签: wordpress woocommerce

我正在尝试更改通过此插件功能创建的产品编辑网址:

function dokan_edit_product_url( $product ) {
    if ( ! $product instanceof WC_Product ) {
        $product = wc_get_product( $product );
    }
    if ( ! $product ) {
        return false;
    }
    if ( 'publish' === $product->get_status() ) {
        $url = trailingslashit( get_permalink( $product->get_id() ) ) . 'edit/';
    } else {
        $url = add_query_arg(
            [
                'product_id' => $product->get_id(),
                'action'     => 'edit',
            ],
            dokan_get_navigation_url( 'products' )
        );
    }
    return apply_filters( 'dokan_get_edit_product_url', $url, $product );
}

您可以看到它有一个apply_filters可用。因此,我试图创建一个过滤器以将URL修改为:example.com/edit-product/product-id

add_filter( 'dokan_get_edit_product_url', function() {

  // I need to get the PRODUCT ID here somehow.
  $url = 'example.com/dashboard/edit-product' . $product_id;

  return $url;

} );

如何在过滤器中获取产品ID?我需要获取产品ID并将其附加到:example.com/dashboard/edit-product/ + product_id

这是一种尝试:

add_filter( 'dokan_get_edit_product_url', function( $product ) {

  $product = wc_get_product( $product );
  var_dump($product);

  return $url;

} );

结果:

/app/filters.php:175:boolean false

1 个答案:

答案 0 :(得分:0)

在@ howard-e的评论中有建议之后,我只是想念global $product;

这是我的完整过滤器:

add_filter( 'dokan_get_edit_product_url', function( $product ) {

  global $product;

  $url = dokan_get_navigation_url() . 'edit-product?product_id=' . $product->get_id();

  return $url;

} );

显然,$ url的格式对于我的设置是唯一的,但是仍然值得发布完整的代码。