Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改“;“添加到购物车”;用于在Woocommerce中购买产品的按钮_Php_Wordpress_Woocommerce_Product - Fatal编程技术网

Php 更改“;“添加到购物车”;用于在Woocommerce中购买产品的按钮

Php 更改“;“添加到购物车”;用于在Woocommerce中购买产品的按钮,php,wordpress,woocommerce,product,Php,Wordpress,Woocommerce,Product,我想做的是这样的一个例子: 顾客购买一种产品。它将显示“查看数字产品”,并具有指向特定页面的自定义链接,而不是“添加到购物车” 我在数据库中查找WooCommerce,试图找出如何知道某个项目已经购买,以便找出如何使函数自动执行此操作: 从wp\u商业\u支付\u代币中选择* token_id gateway_id token user_id type is_default 从wp\u商业\u订单\u项目中选择* order_item_id order_item

我想做的是这样的一个例子:

顾客购买一种产品。它将显示“查看数字产品”,并具有指向特定页面的自定义链接,而不是“添加到购物车”

我在数据库中查找WooCommerce,试图找出如何知道某个项目已经购买,以便找出如何使函数自动执行此操作:

wp\u商业\u支付\u代币中选择*

token_id    gateway_id  token   user_id     type    is_default 
wp\u商业\u订单\u项目中选择*

order_item_id   order_item_name     order_item_type     order_id 
但我还不能理解他们的逻辑,也不能理解WordPress中的正确功能来实现这一点

我可以在网上找到的唯一功能是重定向,但这仅适用于您购买商品时,而不是您返回到已购买商品的页面时:

add_action( 'template_redirect', 'wc_custom_redirect_after_purchase' );
function wc_custom_redirect_after_purchase() {
   global $wp;

   if ( is_checkout() && ! empty( $wp->query_vars['order-received'] ) ) {
        wp_redirect( get_permalink( get_page_by_title( "About" )->ID ) );
        exit;
    }
} 

请告诉我正确的方向。

以下功能将检查客户是否已经购买了产品,如果是这种情况,则“添加到购物车”按钮将替换为自定义的“查看数字产品”链接到“关于”页面的按钮

第一个功能代码由
wc\u customer\u bulled\u product()
源代码以更轻松的方式制作而成。该代码将仅检查登录用户,未登录用户返回false

函数有\u购买的\u项($product\u id){
全球$wpdb;
如果(!用户是否已登录())
返回false;
$customer\u id=get\u current\u user\u id();
$statuses=数组映射('esc_sql',wc_get_是_paid_statuses());
//数一数产品的数量
$count\u query=$wpdb->get\u var(“
从{$wpdb->prefix}帖子中选择COUNT(woim.meta_值)作为p
内部连接{$wpdb->prefix}postemta作为p.ID=pm.post\u ID上的pm
内部联接{$wpdb->prefix}woocmerce\u order\u项目作为p.ID=woi.order\u ID上的woi
内部联接{$wpdb->prefix}woomcommerce\u order\u itemmeta作为woi.order\u item\u id=woim.order\u item\u id上的woim
其中p.post_status IN('wc-“.intlode(','wc-“,$statuses)。”)
和pm.meta_key=''u customer_user'和pm.meta_value=$customer_id
和woim.meta_键(''u product_id','u variation_id'))
和woim.meta_value=$product_id
" );
//如果计数大于0,则返回true布尔值,如果不是false,则返回true布尔值
返回$count\u query>0?真:假;
}
//商店和存档-将“添加到购物车”ajax按钮替换为自定义链接按钮
添加过滤器('woocommerce\u loop\u add\u to\u cart\u link','replace\u loop\u add\u to \u cart',20,2);
函数替换循环添加到购物车($html$product){
如果(已购买物品($product->get_id()){
$page=按标题获取页面(“关于”);
如果(!是_对象($page))
返回$html;
$link=get\u permalink($page->ID);
$text=u uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
$html='';
}
返回$html;
}
//单一产品:用单一产品页面上的自定义按钮替换“添加到购物车”按钮
添加操作('woocommerce\u single\u product\u summary','replace\u single\u add\u to\u cart\u button',1);
功能替换单次添加到购物车按钮(){
全球$产品;
如果(已购买物品($product->get_id())&按标题获取页面('About')){
//对于可变产品类型(保留属性选择字段)
如果($product->is_类型('variable')){
删除操作('woocommerce\u single\u variation'、'woocommerce\u single\u variation\u add\u to\u cart\u button',20);
添加操作('woocommerce\u single\u product\u summary','custom\u single\u add\u to\u cart\u button',20);
}
//适用于所有其他产品类型
否则{
删除操作('woocommerce\u single\u product\u summary'、'woocommerce\u template\u single\u add\u to\u cart',30);
添加操作('woocommerce\u single\u product\u summary'、'custom\u single\u add\u to\u cart\u button'、30);
}
}
}
//实用程序功能:显示自定义按钮替换
功能自定义\单个\添加\到\购物车\按钮(){
$page=按标题获取页面(“关于”);
如果(!是_对象($page))
返回;
$link=get\u permalink($page->ID);
$text=u uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
回声';
}
代码进入活动子主题(或活动主题)的function.php文件。测试和工作

基于:


为了更好地理解您的问题,您需要检查应该登录的特定客户是否带来了此产品,然后您需要更改“添加到购物车”按钮,对吗?是的。如果他们买了东西,我可以检查一下,然后相应地更改按钮。
function has_bought_item( $product_id ) {
    global $wpdb;

    if( ! is_user_logged_in() )
        return false;

    $customer_id = get_current_user_id();
    $statuses      = array_map( 'esc_sql', wc_get_is_paid_statuses() );

    // Count the number of products
    $count_query = $wpdb->get_var( "
        SELECT COUNT(woim.meta_value) FROM {$wpdb->prefix}posts AS p
        INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_items AS woi ON p.ID = woi.order_id
        INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS woim ON woi.order_item_id = woim.order_item_id
        WHERE p.post_status IN ( 'wc-" . implode( "','wc-", $statuses ) . "' )
        AND pm.meta_key = '_customer_user' AND pm.meta_value = $customer_id
        AND woim.meta_key IN ( '_product_id', '_variation_id' )
        AND woim.meta_value = $product_id
    " );

    // Return true boolean value if count is higher than 0, if not false
    return $count_query > 0 ? true : false;
}

// Shop and archives - Replace add to cart ajax button to a custom linked button
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart', 20, 2 );
function replace_loop_add_to_cart( $html, $product ) {
    if( has_bought_item( $product->get_id() ) ) {
        $page = get_page_by_title( "About" );
        if ( ! is_object($page) )
            return $html;
        $link = get_permalink( $page->ID );
        $text = __("See Digital Product", "woocommerce");
        $html = '<a href="' . $link . '" class="button alt add_to_cart_button">' . $text . '</a>';
    }
    return $html;
}

// Single products: Replacing the button add to cart by a custom button on single product pages
add_action( 'woocommerce_single_product_summary', 'replace_single_add_to_cart_button', 1 );
function replace_single_add_to_cart_button() {
    global $product;

    if( has_bought_item( $product->get_id() ) && get_page_by_title( "About" ) ) {
        // For variable product types (keeping attribute select fields)
        if( $product->is_type( 'variable' ) ) {
            remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
            add_action( 'woocommerce_single_product_summary', 'custom_single_add_to_cart_button', 20 );
        }
        // For all other product types
        else {
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            add_action( 'woocommerce_single_product_summary', 'custom_single_add_to_cart_button', 30 );
        }
    }
}

// Utility function: displays a custom  button replacement
function custom_single_add_to_cart_button() {
    $page = get_page_by_title( "About" );
    if ( ! is_object($page) )
        return;
    $link = get_permalink( $page->ID );
    $text = __("See Digital Product", "woocommerce");
    echo '<a href="' . $link . '" class="button alt add_to_cart_button">' . $text . '</a>';
}