传入函数时,全局$PRODUCT为空字符串

时间:2021-04-23 作者:sackadelic

我正在努力优化我的功能。php文件,因为我有一个Woocommerce网站,该网站对主题进行了大量定制。目前,我的函数如下所示:

add_action(\'wp_footer\', \'enqueue_product_modals\');
function enqueue_product_modals() {
    global $product;  //Accessing the Global
    $product_id = $product->get_id();
    if (is_product()) {
        //Standard Modal:
        require_once \'modal-product.php\';

        if (has_term(\'guitar-pickups\', \'product_cat\', $product_id)) {
            include_once \'modal-polarity.php\';
        };

        if (has_term(\'mini-humbuckers\', \'product_cat\', $product_id)) {
            include_once \'modal-minihum.php\';
        };
    }
}

add_action(\'woocommerce_after_single_product_summary\', function () {
    global $product; //Accessing the Global Again
    $name = $product->get_name();
    if (have_comments()) {
        echo \'<p class="reviews-tagline">Trying to leave a review for our \' . $name . \'? <a class="expand" data-toggle="collapse" data-target="#review_form_wrapper" >Leave one here.</a></p>\';
    }
}, 50);

etc.

我理解访问global $product 多次是不好的做法。因此,我开始通过声明global $product 在我的功能顶部。php文件(就像我在JS中一样)并将其传递给每个单独的函数,如下所示:

global $product;

add_action(\'wp_footer\', \'enqueue_product_modals\');
function enqueue_product_modals($product) {
    $product_id = $product->get_id();
    if (is_product()) {
       // code here...
    }
}

add_action(\'woocommerce_after_single_product_summary\', function ($product) {

    $name = $product->get_name();
    if (have_comments()) {
       //code here
}, 50);

问题是,现在所有函数都被破坏了var_dump($product) 在每个函数$product中都有一个空字符串。我现在肯定我不知道我在做什么。是否有人可以提供任何帮助,以正确的方式访问每个功能中的$product global。。。还是更好的方法?

编辑:我还尝试通过$post 对象,这样重写函数,但它仍然是一个空字符串:

add_action(\'wp_footer\', \'enqueue_product_modals\');
function enqueue_product_modals($post) {

    if (is_product()) {

$product = wc_get_product($post->ID); // hoping to use this
        var_dump($post); //Still empty String

    }
}

1 个回复
SO网友:Simon Kane

我认为这里的主要问题是钩子的调用上下文(例如add\\u操作的目标)与函数不同。php内联代码。此外,函数参数来自调用上下文,而不仅仅是因为同一文件中有一个同名变量。

本文件;函数enqueue\\u product\\u modals($product)“;不起作用。

至于Woo globals的用法,我认为所有这些都不受欢迎。以下是global$product的设置方式:

includes/wc-template-functions.php:140: unset( $GLOBALS[\'product\'] );
includes/wc-template-functions.php:150: $GLOBALS[\'product\'] = wc_get_product( $post );
includes/wc-template-functions.php:152: return $GLOBALS[\'product\'];
因此,您可以看到;“向前看”;获取给定帖子的WC\\U产品对象的方法。

相关推荐

Help with comments.php

我有一个带有短代码的页面,显示数据库中的信息。我已将其设置为允许在页面上发表评论。我遇到的问题是,当我单击“提交评论”时,我会收到以下消息:注意:事件中未定义索引:id。php在线989这一行从用户单击以访问此页面的链接中获取id,这很好。是否有方法通过注释传递此id。php页面以确保页面加载正常?以下是评论。php代码:if (have_comments()) { wp_list_comments(\'\'); } $comments_args = array(