我现在有3-4周的大问题。我写的一个插件(我不是程序员,我只是从另一个插件复制和修改过)在保存产品后会输出一个白色的死亡屏幕。前端一切正常,功能完美。
插件应该从数据库中获取价格,并通过一个短代码[显示\\u价格]输出它,用于普通主题样式或[显示\\u价格\\u否\\u样式],无需任何样式。
请参阅所附插件的代码。
非常感谢您的帮助:):)
(顺便说一句:我对其他功能也有问题,例如“get\\u sku”或“get\\u title”)
非常感谢Patrick
因此,这应该创建一个执行函数的短代码,以正确获取价格和输出。保存包含快捷码的产品时,会发生以下错误:
致命错误:未捕获错误:在/home/中对null调用成员函数get\\u title()。sites/123/site5586569/web/wordpress/wp-content/plugins/woocommerce-display-Variable/display\\u-Variable。php:180堆栈跟踪:#0/主/。sites/123/site5586569/web/wordpress/wp-content/plugins/woocommerce-display-Variable/display\\u-Variable。php(140):display\\u info(5449)#1/home/。站点/123/site5586569/web/wordpress/wp包含/短代码。php(319):display\\u info\\u shortcode(“”,,“display\\u info”)\\2[内部函数]:do\\u shortcode\\u tag(Array)\\35; 3/home/。站点/123/site5586569/web/wordpress/wp包含/短代码。php(197):preg\\u replace\\u回调(\'/\\[(\\[?)(displa…\',\'do\\u shortcode\\u ta…\',\'display\\u info]\\n\')\\4/home/。sites/123/site5586569/web/wordpress/wp-content/themes/enfold/config-templatebuilder/avia-template-builder/php/shortcode-helper。班php(485):do\\u短代码(“[显示信息]\\n”)\\5/home/。sites/123/site5586569/web/wordpress/wp content/themes/enfold/config templatebuilder/avia shortcodes/textblock。php(253):ShortcodeHelper::avia\\u apply\\u autop(\'
插件代码
if ( in_array( \'woocommerce/woocommerce.php\', apply_filters( \'active_plugins\', get_option( \'active_plugins\' ) ) ) ){
add_shortcode(\'display_price\', \'display_price_shortcode\');
}
function display_price_shortcode($atts) {
global $post;
extract(shortcode_atts(array(
\'id\' => $post->ID,
), $atts));
if(get_post_type($id)==\'product\'){
ob_start();
display_price_no_style_only($id);
return ob_get_clean();
}else{
return "";
}
}
function display_price_no_style_only($id="" ){
global $wpdb;
global $post;
global $product;
if(empty($id)){
$id=$post->post_id;
}
if(get_post_type( $id )==\'product\'){
$derpreis = $wpdb->get_var( "
SELECT COUNT(meta_value) FROM $wpdb->postmeta
WHERE meta_key = \'_price\'
AND post_id = $id
");
}
if($derpreis > 0 ) {
echo \'<span class="displayprice">\'. $product->get_price_html() . \'</span>\';
}
if($derpreis = 0 ) {
echo \'Preis nicht verfügbar\';
}
}
if ( in_array( \'woocommerce/woocommerce.php\', apply_filters( \'active_plugins\', get_option( \'active_plugins\' ) ) ) ){
add_shortcode(\'display_price_no_style\', \'display_price_no_style_shortcode\');
}
function display_price_no_style_shortcode($atts) {
global $post;
extract(shortcode_atts(array(
\'id\' => $post->ID,
), $atts));
if(get_post_type($id)==\'product\'){
ob_start();
display_price_only($id);
return ob_get_clean();
}else{
return "";
}
}
function display_price_only($id="" ){
global $wpdb;
global $post;
global $product;
if(empty($id)){
$id=$post->post_id;
}
if(get_post_type( $id )==\'product\'){
$derpreis = $wpdb->get_var( "
SELECT COUNT(meta_value) FROM $wpdb->postmeta
WHERE meta_key = \'_price\'
AND post_id = $id
");
}
if($derpreis > 0 ) {
echo $product->get_price_html();
}
if($derpreis = 0 ) {
echo \'Kein Preis verfügbar\';
}
}
SO网友:Bjorn
The error
来自文件:
/wp-content/plugins/woocommerce-display-various/display_various.php
第180行。
禁用插件“woocommerce display Variable”,并检查问题是否仍然存在。
<小时>
Your code
为什么要使用输出缓冲(
ob_start()
)? 此外,您没有正确使用它。
您的代码还有很多需要改进的地方。。。
查看我的更改:
add_action(\'init\',\'add_custom_price_shortcodes\');
function add_custom_price_shortcodes() {
if ( class_exists( \'woocommerce\' ) ) {
add_shortcode(\'display_price\', \'display_price_shortcode\');
add_shortcode(\'display_price_no_style\', \'display_price_no_style_shortcode\');
}
}
function display_price_shortcode() {
global $post;
if(get_post_type($post->ID) == \'product\'){
return price_shortcode_display_price($post->ID, \'with_style\');
} else {
return "";
}
}
function display_price_no_style_shortcode() {
global $post;
if(get_post_type($post->ID) == \'product\'){
return price_shortcode_display_price($post->ID, \'no_style\');
} else {
return "";
}
}
function price_shortcode_display_price($post_id, $type = \'no_style\') {
$product = wc_get_product($post_id);
if($product) {
$derpreis = $product->get_price();
if($derpreis > 0 ) {
if( $type == \'no_style\') {
return $product->get_price_html();
}
if( $type == \'with_style\') {
return \'<span class="displayprice">\'. $product->get_price_html() . \'</span>\';
}
} else {
return \'Kein Preis verfügbar\';
}
} else {
return \'Kein Preis verfügbar\';
}
}
你好,比约恩