WP_Query按标签搜索

时间:2019-12-01 13:29:12

标签: php wordpress plugins woocommerce hook-woocommerce

我正在使用WooCommerce设置WordPress,其中一项要求是一些集成,使一个人从另一个网站直接进入特定产品。我已经在产品的标签上设置了外部产品引用

示例传入查询为:

function solve(arr) {
    var sumsMap = {}
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            var sum = arr[i] + arr[j]
            
            // several pairs of indices can correspond to the same summ so keep all of them
            var mappedIndices = sumsMap[sum]
            if (typeof mappedIndices == "undefined") {
                mappedIndices = []
            }
            let pair = {}
            pair.first = i
            pair.second = j
            mappedIndices.push(pair)
            
            sumsMap[sum] = mappedIndices
        }
    }    

    var maxD = Number.MIN_SAFE_INTEGER
    for (var k = 0; k < arr.length; k++) {
        for (var l = 0; l < arr.length; l++) {
            mappedIndices = sumsMap[arr[l] - arr[k]]
            
            if (mappedIndices != undefined) {
                // in the worst case, 4 pairs of indices may contain k or l but the fifth one won't as numbers in the array are unique and hence the same index can occur only twice 
                var steps = Math.min(5, mappedIndices.length)
                for (var s = 0; s < steps; s++) {
                    var pair = mappedIndices[s]
                    if (pair.first != k && pair.first != l && pair.second != k && pair.second != l) {
                        maxD = Math.max(maxD, arr[l])    
                    }
                }
            }
        }
    }
    
    if (maxD == Number.MIN_VALUE) {
        return -1
    } else {
        return maxD
    }
}

document.write(solve([-100,-1,0,7,101] ))
document.write("<br>")
document.write(solve([-93,-30,-31,-32] ))

我已经编写了一个简短的插件来执行此操作,但是我似乎无法通过标签搜索产品

例如,您可以看到$ params的两行,按产品ID搜索时,最上面的(当前已注释掉)效果很好,但是最下面的试图从tag起作用的内容却没有任何效果。可以看到我要去哪里了吗?

P.S。这是我第一次尝试使用wordpress插件。它可能会导致效率低下,安全性受损或存在一些明显的问题。我将提交它以进行堆栈溢出代码审阅,但我需要解决这个最后一个错误!

感谢您提供的任何帮助。另外,如果您可以提出从标签到产品网址的另一种方法,我会对此感兴趣。

http://localhost/TestSite/search?q=9404

3 个答案:

答案 0 :(得分:0)

请尝试以下操作:

function TagLinker(){

    if (isset($_GET['q']))
    {
        $TagNumber = $_GET['q'];
        $params=array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'tax_query' => array( array(
                            'taxonomy' => 'product_tag',
                            'field' => 'slug',
                            'terms' => $TagNumber
                        )
        ));
        $wc_query = new WP_Query($params);

        if ($wc_query -> have_posts() ) {
            $wc_query -> the_post();

            $product_id = get_the_ID($wc_query->ID);

            $url = get_permalink( $product_id );

            echo $url;
            //wp_reset_postdata();
            //if ( wp_redirect( $url ) ) {exit;}
        };
    }
}
add_action( 'init', 'TagLinker' );

答案 1 :(得分:0)

$params=array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'tax_query' => array( array(
                            'tag' => $TagNumber
                        ),
        ));

您应该将标签放在数组中。请参考开发者页面中的标签部分。 https://developer.wordpress.org/reference/classes/wp_query/

答案 2 :(得分:0)

$params = array(
    'post_status'    => 'publish',
    'post_type'      => 'product',
    'tax_query'      => array(
        array(
            'taxonomy' => 'product_tag',
            'field' => 'slug',
            'terms' => $TagNumber,//this is category slug da mani
        )
    )
);

尝试此代码。它正在我的机器上工作。