致命错误:未捕获错误:在同一页面上的自定义插件函数中调用null成员函数get_type()

时间:2018-04-03 11:02:04

标签: php wordpress woocommerce

我有一个基于https://wppb.me/

的自定义插件

在我的class-tshirt-public.php中,我有以下功能。

public function list_categories() {

$args = array ('post_type' => 'tshirt-themes','orderby' => 'name','order' => 'ASC' );
$loop = new WP_Query( $args );      
if ( $loop->have_posts() ) : ?>

    <select>
    <?php
    while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <ul>
        <option value="<?php echo get_the_id(); ?>"> <?php echo get_the_title(); ?> </option>
    </ul>
        <?php 
    endwhile; ?>    
     </select> 
     <?php
    endif;
}

并且在同一个文件中我有一个将其注册为短代码的函数。

在thsirt-public-display.php文件中,我有以下内容。

 <h1>Loaded Categories</h1>
  <?php $this->list_categories(); ?>
 </div>

当我加载页面时,我收到以下错误,但没有提供有关此问题的信息。

Fatal error: Uncaught Error: Call to a member function get_type() on null in /Applications/MAMP/htdocs/tshirt/wp-content/plugins/woocommerce/includes/wc-template-functions.php:1170 Stack trace: #0 /Applications/MAMP/htdocs/tshirt/wp-includes/class-wp-hook.php(286): woocommerce_template_single_add_to_cart('') #1 /Applications/MAMP/htdocs/tshirt/wp-includes/class-wp-hook.php(310): WP_Hook->apply_filters(NULL, Array) #2 /Applications/MAMP/htdocs/tshirt/wp-includes/plugin.php(453): WP_Hook->do_action(Array) #3 /Applications/MAMP/htdocs/tshirt/wp-content/plugins/woocommerce/templates/content-single-product.php(61): do_action('woocommerce_sin...') #4 /Applications/MAMP/htdocs/tshirt/wp-includes/template.php(690): require('/Applications/M...') #5 /Applications/MAMP/htdocs/tshirt/wp-content/plugins/woocommerce/includes/wc-core-functions.php(180): load_template('/Applications/M...', false) #6 /Applications/MAMP/htdocs/tshirt/wp-content/plugins/woocommerce/templates/single-product.php(37): wc_get_template_part('content', 'single-product') in /Applications/MAMP/htdocs/tshirt/wp-content/plugins/woocommerce/includes/wc-template-functions.php on line 1170

我只能假设它与woocommerce模板冲突,但我不知道在进行这些查询时的最佳做法。

1 个答案:

答案 0 :(得分:0)

如果你使用动作钩子:'woocommerce_single_product_summary',你应该使用get_posts($ args)而不是'WP_Query'

public function list_categories() {
    $args = array ('post_type' => 'tshirt-themes','orderby' => 'name','order' => 'ASC' );
    $loops = get_posts( $args );      
    if ( $loops ) : ?>
       <select>
       <?php
       foreach ($loops as $key => $value) {?>         
        <option value="<?=$value->ID ?>"> <?=$value->post_title?> </option>   
       <?php 
       } ?>    
       </select> 
     <?php
    endif;
}