【问题标题】:I want to make plugin for Woocommerce我想为 Woocommerce 制作插件
【发布时间】:2021-11-22 04:44:09
【问题描述】:

我想用 woocommerce 制作 wordpress 插件。我的想法是制作诸如众筹之类的东西(显示赚到的钱、目标钱等)。我制作了一个获取产品 ID 的脚本,但是当我尝试使用 wc_get_product($id) 时出现错误“调用未定义的函数 wc_get_product()”。我尝试包含 woocommerce.php 文件,但后来我得到“wc_get_product 不应该在 woocommerce_init、woocommerce_after_register_taxonomy 之前被调用 并且 woocommerce_after_register_post_type 操作已完成。”

主文件:

<?php
/**
 * Plugin Name: xxx
 * Plugin URI: xxx
 * Description: xxx
 * Version: xxx
 * Author: xxx.com
 * Author URI: xxx
 */

defined( 'ABSPATH' ) or die( 'Plugin file cannot be accessed directly.' );
/* prevents submit button from sendind the same data twice (off for now)
function preventResubmit(){
    ?>
<script>
    if ( window.history.replaceState ) {
        window.history.replaceState( null, null, window.location.href );
    }
</script>
<?php
}
*/

require(dirname(__FILE__).'/shortcodes.php');

add_action("admin_menu","cfdg_add_admin_menu");

function cfdg_add_admin_menu(){
    add_menu_page("Crowdfunding","Crowdfunding", "manage_options", "cfdg-admin", "cfdg_add_page", "dashicons-money");
}
function cfdg_add_page(){
    require (dirname(__FILE__).'/adminmenu.php');
}

?>

简码.php

<?php

$earnedMoney = cfdg_getEarnedMoney();
$targetMoney = 30000;


function cfdg_getEarnedMoney() {
    global $wpdb;
    
    $cdfg_money_to_return = 0;
    $sql = 'SELECT ml.product_id FROM wp_wc_order_product_lookup AS pl 
    JOIN wp_wc_product_meta_lookup AS ml ON pl.product_id = ml.product_id
    JOIN wp_posts AS wp ON wp.ID = pl.order_id WHERE LOCATE("crowdfunding",sku) AND (wp.post_status = "wc-processing" OR wp.post_status = "wc-completed");';
    $results = $wpdb->get_results($sql);
    if(!$results) return 0;

    foreach($results as $res){
        $cdfg_produkcik = wc_get_product($res); /* <--- HERE I GET THE ERROR */
        $cdfg_product_price= $cdfg_produkcik->get_price();
        $cdfg_money_to_return += $cdfg_product_price;
    }
        return $cdfg_money_to_return ;
}



//PROGRESS BAR
add_shortcode('cfdg_progress_bar', 'cfdg_func_progress_bar');

function cfdg_func_progress_bar(){
    global $earnedMoney; global $targetMoney;

    echo "Earned: ".$earnedMoney." from: ".$targetMoney." required";
}
//END OF PROGRESS BAR



?>

【问题讨论】:

    标签: php mysql wordpress woocommerce plugins


    【解决方案1】:

    你也可以使用

    require_once(../../wp-load.php)
    

    【讨论】:

    • 我试过 require_once(ABSPATH."wp-load.php");但它没有用:/
    • 可能你的 wp-load.php 路径不正确,请重新检查。
    • 欢迎来到 Stack Overflow!请将其表述为一个解释性的条件答案,以避免给人留下评论或询问澄清问题而不是回答的印象(应该使用评论而不是答案,比较meta.stackexchange.com/questions/214173/…)。例如像“如果你的问题是......那么解决方案是......因为......。”
    【解决方案2】:

    您需要定义全局 WooCommerce 变量。

    global $woocommerce;
    //make sure that woocommerce plugin is active
    

    【讨论】:

    • 我进行了更改。添加:``` include_once(ABSPATH.'wp-admin/includes/plugin.php');全球$woocommerce; add_action('admin_init', 'check_some_other_plugin'); function check_some_other_plugin(){ if(is_plugin_active( "woocommerce/woocommerce.php")) require(dirname(FILE).'/shortcodes.php');否则回显“不活动”; } ``` 到主文件。现在我的短代码没有加载,好像没有加载 shortcodes.php(可能是这种情况)
    • 值得一提的是,这些函数在我的插件中不起作用,但使用 XYZ PHP 代码片段它加载得很好。
    • 好的,太好了,干杯
    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多