Php WP_按标记进行查询搜索

Php WP_按标记进行查询搜索,php,wordpress,plugins,woocommerce,hook-woocommerce,Php,Wordpress,Plugins,Woocommerce,Hook Woocommerce,我正在与WooCommerce一起建立WordPress,其中一个要求是一点集成,将一个人从另一个网站直接带到一个特定的产品。我已经在产品标签上设置了外部产品参考 传入查询的示例如下: http://localhost/TestSite/search?q=9404 我写了一个简短的插件来实现这一点,但我似乎无法通过标签搜索产品 您可以看到$params的两行,例如,在按产品id搜索时,最上面的一行(当前已注释掉)可以正常工作,但最下面的一行尝试从标记工作时不会产生任何结果。你能看出我错在哪里吗

我正在与WooCommerce一起建立WordPress,其中一个要求是一点集成,将一个人从另一个网站直接带到一个特定的产品。我已经在产品标签上设置了外部产品参考

传入查询的示例如下:

http://localhost/TestSite/search?q=9404
我写了一个简短的插件来实现这一点,但我似乎无法通过标签搜索产品

您可以看到$params的两行,例如,在按产品id搜索时,最上面的一行(当前已注释掉)可以正常工作,但最下面的一行尝试从标记工作时不会产生任何结果。你能看出我错在哪里吗

这是我第一次尝试wordpress插件。它可能效率低下、安全性受损或存在一些突出问题。我将把它提交给stack overflow code review,但我需要解决最后一个bug

谢谢你能提供的任何帮助。另外,如果你能建议一种从标签到产品URL的替代方法,我会感兴趣的

//Test Product Id: 11030
//Tag on Test Product: 9404
//http://localhost/TestSite/search?q=9404

function TagLinker() {

    if (isset($_GET['q']))
    {
        $TagNumber = $_GET['q'];

        //create the params array
        //$params = array('post_type' => 'product', 'p' => 11030);
        $params = array('post_type' => 'product', 'tag' => $TagNumber);

        $wc_query = new WP_Query($params);

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

            $product_id = get_the_ID();

            $url = get_permalink( $product_id );

            wp_reset_postdata();

            if ( wp_redirect( $url ) ) {exit;}
        };
    }

}

add_action( 'init', 'TagLinker' );
请试试这个:

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' );
请试试这个:

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' );
您应该在数组中指定标记。请参考开发者页面中的标签部分

您应该在数组中指定标记。请参考开发者页面中的标签部分

试试这个代码。它在我的机器里工作


试试这个代码。它在我的机器中工作。

9404
真的是标签(即字符串)还是可能是
标签id
?在后一种情况下,您必须在参数数组中使用
'tag\u id'=>$TagNumber
。是的,这是标记的字符串文本,我认为它被称为标记“slug”。是
9404
真的是标记(即字符串)还是
tag\u id
?在后一种情况下,您必须在参数数组中使用
'tag\u id'=>$TagNumber
。是的,这是标记的字符串文本,我认为它被称为“slug”。非常好,谢谢。下次有机会我会去看看的!谢谢你的帮助,但这个没用。这很奇怪,因为你已经清楚地测试过了。它根本没有带回任何记录。我需要安装一些额外的插件吗?我运行的是最新版本的wordpress和最新版本的woocommerce。谢谢你能提供的任何额外帮助!将搜索字段从“id”更改为“slug”,现在工作如梦。谢谢好东西,谢谢。下次有机会我会去看看的!谢谢你的帮助,但这个没用。这很奇怪,因为你已经清楚地测试过了。它根本没有带回任何记录。我需要安装一些额外的插件吗?我运行的是最新版本的wordpress和最新版本的woocommerce。谢谢你能提供的任何额外帮助!将搜索字段从“id”更改为“slug”,现在工作如梦。谢谢谢谢我将在本周晚些时候尝试一下。这个不起作用。对不起。它似乎带回了所有东西并返回了结果集中的第一项。谢谢!我将在本周晚些时候尝试一下。这个不起作用。对不起。它似乎会返回所有内容并返回结果集中的第一项。
$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
        )
    )
);