使用WPEC 3.8.9.2显示自定义模板中的变体时出现问题

时间:2012-11-23 作者:Cam

在自定义构建的模板中显示变体时遇到问题,每次在循环中调用wpsc函数have\\u variation\\u groups(),都会出现以下php错误

商业/wpsc包括/产品模板。php第1419行[2012年11月22日23:27:39]php致命错误:在/home/tofasto/public\\html/sandbox/wp/wp-content/plugins/wp-e-commerce/wpsc-includes/product-template中对非对象调用成员函数have\\u variance\\u groups()。php第1419行。

have\\u variation\\u groups()在WP\\u查询循环中被调用,如下所示;

$args = array(\'post_type\' => \'wpsc-product\', \'posts_per_page\' => -1);
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post();

   ... 

<?php if (wpsc_have_variation_groups()) { ?>
<fieldset>
    <legend>
        <?php _e( \'Product Options\', \'wpsc\'); ?>
    </legend>
    <div class="wpsc_variation_forms">
        <table>
            <?php while (wpsc_have_variation_groups()) : wpsc_the_variation_group();
            ?>
            <tr>
                <td class="col1">
                    <label for="<?php echo wpsc_vargrp_form_id(); ?>">
                        <?php echo wpsc_the_vargrp_name(); ?>:</label>
                </td>
                <?php /** the variation HTML and loop */?>
                <td class="col2">
                    <select class="wpsc_select_variation" name="variation[<?php echo wpsc_vargrp_id(); ?>]"
                    id="<?php echo wpsc_vargrp_form_id(); ?>" <?php while (wpsc_have_variations())
                    : wpsc_the_variation(); ?>
                        <option value="<?php echo wpsc_the_variation_id(); ?>" <?php echo wpsc_the_variation_out_of_stock();
                        ?>>
                            <?php echo wpsc_the_variation_name(); ?>
                        </option>
                        <?php endwhile; ?>
                    </select>
                </td>
            </tr>
            <?php endwhile; ?>
        </table>
    </div>
    <!--close wpsc_variation_forms-->
</fieldset>
<?php } ?> 

    ...

endwhile;
奇怪的是,其他wpsc函数,如wpsc\\u the\\u product\\u id()和wpsc\\u product\\u has\\u stock()工作,而与变体相关的函数却没有。。。

感谢您的帮助

谢谢

1 个回复
最合适的回答,由SO网友:djrmom 整理而成

如果查看默认的wpsc-products\\U页面。php模板,它使用

while (wpsc_have_products()) :  wpsc_the_product();
而不是使用\\u posts()和\\u posts()来设置循环。

wpsc\\u The\\u product()函数设置产品变体函数使用的全局$wpsc\\u变体对象。

我认为,为了使用wpsc\\u the\\u product(),您需要将查询设置为全局$wp\\u查询,但您可以在打开循环后自行设置$wpsc\\u变体:

while ($loop->have_posts()) : $loop->the_post();
    global $wpsc_variations;
    $wpsc_variations = new wpsc_variations( get_the_ID() );
这有望使所有的产品变化功能都能正常工作。

这是完整的wpsc\\u the\\u product()函数。它还设置了全局$wpsc\\u custom\\u meta,这可能会对自定义元相关函数产生类似的影响,因此您可能需要考虑其他一些问题。

/**
 * wpsc the product function, gets the next product,
 * @return nothing
 */
function wpsc_the_product() {
    global $wpsc_custom_meta, $wpsc_variations;
    the_post();
    $wpsc_custom_meta = new wpsc_custom_meta( get_the_ID() );
    $wpsc_variations = new wpsc_variations( get_the_ID() );
}
希望这有帮助。

结束

相关推荐

Loop after page content

我刚从2.9升级到3.4.2(我知道,我知道,但如果它没有坏…)我有一些页面模板,它们被设置为(或至少被设置为)先显示页面内容,然后开始一个帖子循环,如下所示:<div id=\"content\"> <div class=\"content-title\">ABOUT THE SITE</div> <div id=\"content-main\"> <img src=\"<?php blo