我有一个基于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模板冲突,但我不知道在进行这些查询时的最佳做法。
答案 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;
}