【问题标题】:Get a product from specific product attribute term name in WooCommerce从 WooCommerce 中的特定产品属性术语名称获取产品
【发布时间】:2020-11-02 17:41:38
【问题描述】:

我正在尝试创建一个 WooCommerce 短代码来显示带有一些信息的产品。

每天都有一个新产品,属性DAGAANBIEDING,价值JANEE

我只想展示价值为JA的产品。
短代码正在运行,但没有显示任何内容。
这就是我所拥有的:

//custom shortcodes
if( !function_exists('product_snippet') ) {    

    function product_snippet( $atts ) {

        // Attributes
        extract( shortcode_atts( 
            array(
                'taxonomy' => 'pa_dagaanbieding', // You will use $id to get the value of this attribute
                'terms' => 'Ja' // You will use $snippet to get the value of this attribute
            ), 
            $atts
        ));

        // Get an instance of the product object
        $product = wc_get_product( $id );

        // Displays go here
        return '<div class="row">
        <div class="col-md-6"><h3>'.$product->get_title().'</h3>'.$product->get_image().'<br><br><a href="'.get_permalink( $id ).'"><button type="submit" class="single_add_to_cart_button button alt">Bekijk aanbieding</button></a></div>
        <div class="col-md-6">'.$product->get_regular_price().' '.$product->get_regular_price().'</div>
        </div>';
        
        
    }

    add_shortcode( 'product_snippet', 'product_snippet' );
}

但它不显示信息。

【问题讨论】:

    标签: php sql wordpress woocommerce shortcode


    【解决方案1】:

    您的代码中有一些错误和遗漏的东西。尝试以下操作,使用自定义轻型 SQL 查询获取具有 Ja 术语名称的 pa_dagaanbieding 产品属性(分类)的产品:

    if( !function_exists('display_product_dagaanbieding_ja') ) {    
    
        function display_product_dagaanbieding_ja( $atts ) {
            // Attributes
            extract( shortcode_atts( 
                array(
                    'taxonomy'  => 'pa_dagaanbieding', // The taxonomy of this product attribute
                    'term_name' => 'Ja', // The term name for this product attribute
                ), 
                $atts
            ));
            
            global $wpdb;
            
            // SQL query: To get the product ID from defined product attribute term name
            $product_id = $wpdb->get_var( $wpdb->prepare("
                SELECT tr.object_id
                FROM {$wpdb->prefix}term_relationships tr
                INNER JOIN {$wpdb->prefix}term_taxonomy tt
                    ON tr.term_taxonomy_id = tt.term_taxonomy_id
                INNER JOIN {$wpdb->prefix}terms t
                    ON tt.term_id = t.term_id
                WHERE tt.taxonomy = '%s'
                AND t.name = '%s'
            ", $taxonomy, $term_name ) );
        
            // Exit if there is no product Id
            if( ! $product_id ) return;
    
            // Get an instance of the product object
            $product = wc_get_product( $product_id );
    
            // Exit if the product object is not defined
            if( ! is_a( $product, 'WC_Product' ) ) return;
    
            // Displays go here
            return '<div class="row">
            <div class="col-md-6"><h3>'.$product->get_title().'</h3>'.$product->get_image().'<br><br><a href="'.$product->get_permalink().'"><button type="submit" class="single_add_to_cart_button button alt">Bekijk aanbieding</button></a></div>
            <div class="col-md-6">'.$product->get_price_html().'</div>
            </div>';
        }
    
        add_shortcode( 'product_ja', 'display_product_dagaanbieding_ja' );
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    用法: [product_ja]echo do_shortcode('[product_ja]');

    【讨论】:

    • 做到了!谢谢!我从你的代码中删除了这个和平。 ''' //自定义简码 if( !function_exists('product_sn-p') ) { function product_sn-p( $atts ) { // 属性提取( shortcode_atts( array( 'taxonomy' => 'pa_dagaanbieding', // 你将使用 $taxonomy 设置此属性的分类 'terms' => 'Ja', // 你将使用 $terms 获取此属性的值'''
    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 2021-06-07
    • 2018-10-09
    相关资源
    最近更新 更多