【问题标题】:Get WooCommerce product SKU in product pages meta box在产品页面元框中获取 WooCommerce 产品 SKU
【发布时间】:2017-02-21 22:16:02
【问题描述】:

我在 WooCommerce 的后端有一个自定义元框。目前我已将其设置为显示单个产品页面中的一些数据。

我使用<?php the_title(); ?> 显示产品的标题,我使用<?php the_field('myfield'); ?> 显示来自 ACF 字段的一些内容。

我也真的希望能够在此元框中显示 SKU,但我尝试的所有操作都会破坏页面。

我尝试添加<?php echo $product->get_sku(); ?>,但它打破了页面。我已经尝试了很多其他的东西。

我只需要将库存选项卡上的 sku 值传递到同一管理页面上的元框。

其他人可以用这个吗?谢谢。

【问题讨论】:

  • 您是否在任何地方定义了$product
  • 我在下面添加了一个答案,解释了我使用的代码的哪一部分。再次感谢。

标签: php wordpress woocommerce product sku


【解决方案1】:

您是否将$product 变量设置为全局变量(global $product;)? @helgatheviking 已经提到过。

喜欢:

global $product;
echo 'SKU: ' . $product->get_sku();

【讨论】:

  • 我的元框是通过插件创建的。我尝试在插件中将其设置为全局,但没有帮助。
  • @minemind 这与 metabox 无关,您说您试图获取 sku 值,但它破坏了您的页面,因此您使用 <?php echo $product->get_sku(); ?> 的地方只是放了 global $product; 之前。有意义吗?
  • 是的,这就是我所做的,它仍然打破了页面。
  • 这是元框在尝试获取 sku 值之前的样子:imgur.com/a/bZHgt 这是它之后的样子:imgur.com/a/uac0A
【解决方案2】:

您可以尝试以这种方式在常规选项产品页面上插入新的元框 SKU 字段:

add_action( 'woocommerce_product_options_general_product_data', 'add_the_sku_to_general_product_field' );
function add_the_sku_to_general_product_field() {
    global $post;

    $product_sku = get_post_meta( $post->ID, '_sku', true );

    echo '<div class="options_group">';

    woocommerce_wp_text_input( array(
        'id'                => '_sku',
        'label'             => __( 'SKU', 'woocommerce' ),
        'placeholder'       => '',
        'description'       => __( 'Enter the SKU', 'woocommerce' )
    ) );

    echo '</div>';

}

// Saving the Custom Admin Field in general tab products pages when submitted
add_action( 'woocommerce_process_product_meta', 'save_the_sku_to_general_product_field' );
function save_the_sku_to_general_product_field( $post_id ){

    $wc_field = $_POST['_sku'];

    if( !empty($wc_field))
        update_post_meta( $post_id, '_sku', esc_attr( $wc_field ) );
}

或者只是显示 SKU……

使用此代码:

add_action( 'woocommerce_product_options_general_product_data', 'add_the_sku_to_general_product_field' );
function add_the_sku_to_general_product_field() {
    global $post;

    $product_sku = get_post_meta( $post->ID, '_sku', true );

    echo '<div class="options_group">';

    echo '<p class="form-field _sku_product "><label for="_sku_product">SKU: </label><span style="font-size:120%;">'.$product_sku.'</span></p>';

    echo '</div>';

}

由于我不使用您的插件,因此我不保证它会起作用,但您应该尝试一下。

代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。


参考资料:

【讨论】:

    【解决方案3】:

    谢谢。

    您建议它现在在插件内部工作的以下代码部分。

    global $post;
    
    $product_sku = get_post_meta( $post->ID, '_sku', true );
    

    当我回显$product_skuit 时返回值。

    【讨论】:

      【解决方案4】:

      将此添加到您的functions.php以在产品页面中显示SKU(产品代码):

      add_action( 'woocommerce_single_product_summary', 'dev_designs_show_sku', 5 );
      function dev_designs_show_sku(){
          global $product;
          echo 'Product Code: ' . $product->get_sku();
      }
      

      如果您对看到产品代码而不是 SKU 感到惊讶;我使用以下代码用产品代码替换 SKU(根据客户要求)

      function translate_woocommerce($translation, $text, $domain) {
          if ($domain == 'woocommerce') {
              switch ($text) {
                  case 'SKU':
                      $translation = 'Product Code';
                      break;
                  case 'SKU:':
                      $translation = 'Product Code:';
                      break;
              }
          }
          return $translation;
      }
      
      add_filter('gettext', 'translate_woocommerce', 10, 3);
      

      【讨论】:

        猜你喜欢
        • 2014-07-04
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多