使用 Woocommerce 中 URL 的短代码按 sku 第一个字符获取产品 ID

Get product ids by sku first characters using a shortcode from an URL in Woocommerce

我有多个产品,其 sku 名称如 AL-888、A-2323、AL-etrere。 我想根据这个 sku 名称的前两个词查找产品。

我正在为此目的创建短代码,但无法让它工作。

如有任何帮助,我们将不胜感激。

此短代码的代码:

 function all_state_list_function(){

   $name = $_GET['sku']; //this give sku value from url like Al:2323

   echo $name;

  $args = array( 
      'post_type'       => 'product', 
      'posts_per_page'  => -1, 
      'orderby'         => 'name',
      'order'           => 'DESC',
      'meta_query' => array(
         'relation' => 'AND',
         array(
            'key'     => 'free_form',
            'value'   => '1',
         ),
         array(
            'key'     => '_sku',
            'value'   => $name.'-%',
            'compare' => 'LIKE',
         ),
      ),
   );

   $loop = new WP_Query( $args );

   while ( $loop->have_posts() ) : $loop->the_post(); 

      $product_id = get_the_ID(); 
      echo $product_id;

   endwhile;

   wp_reset_query(); 

}
add_shortcode( 'all_state_list_shortcode', 'all_state_list_function' );

根据您的第一个具有 SQL 查询的版本代码,这是使用 URL 中的 GET 方法从第一个 SKU 字符值获取产品 ID 的正确方法:

add_shortcode( 'all_state_list_shortcode', 'all_state_list_function' );
function all_state_list_function(){
    if ( isset($_GET['sku']) && ! empty($_GET['sku']) ) {

        ob_start();

        $sku = esc_attr( $_GET['sku'] ) .'%';

        global $wpdb;
        $results = $wpdb->get_col( "
            SELECT p.ID FROM {$wpdb->prefix}posts as p
            JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
            WHERE p.post_type LIKE 'product' AND p.post_status LIKE 'publish'
            AND meta_key LIKE '_sku' AND meta_value LIKE '$sku'
        " );

        if( count($results) > 0 ) {
            echo implode(',', $results);
        } else {
            echo 'Nothing found';
        }

        return ob_get_clean();
    }
}

代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。