我已经编写了两个函数来在每个产品下方的商店页面上显示自定义字段,可以查看here。具体是灯泡类型和覆盖区域。但是,这些仅适用于某些产品。现在,我在他们不申请时输入N / A,但如果该字段为空,我想写一个条件语句来隐藏整个部分。
不幸的是,每次我这样做时,代码都会破坏网站,因为它写得不正确。
这些是我为显示自定义字段而编写的功能。
add_action('woocommerce_shop_loop_item_title','show_coverage');
function show_coverage() {
echo '<span class="extra-info-head">Coverage Area:</span> ';
$coverage = get_post_meta( $post->ID );
$custom_fields = get_post_custom();
$coverage = $custom_fields['wpcf-coverage-area'];
foreach ( $coverage as $key => $value ) {
echo $value . '<br/>';
}}
add_action('woocommerce_shop_loop_item_title','show_bulbs');
function show_bulbs() {
echo '<span class="extra-info-head">Light Bulbs:</span> ';
$custom_fields = get_post_custom();
$bulbs = $custom_fields['wpcf-light-bulbs'];
foreach ( $bulbs as $key => $value ) {
echo $value;
}}
道歉,如果这些内容写得不好,并对任何建议和帮助表示赞赏!
*更新:这是通过结合以下答案和WordPress自定义字段帖子的后端选项解决的。
答案 0 :(得分:1)
不幸的是,每次我这样做时,代码都会破坏网站,因为它写得不正确。
您的网站错误输出,因为您有一个&#34;未声明的变量。&#34;
在回调函数show_coverage()
中,您使用的是未定义的变量$post
。该函数并不知道这个变量,因为你还没有将它带入函数&#39;范围。
虽然您可以加入global $post
,但最好使用API函数而不是全局变量。
$coverage = get_post_meta( get_the_ID(), 'wpcf-coverage-area' );
让我们更进一步。如果自定义元数据不存在于数据库中该怎么办?然后$coverage
不会有任何内容。如果没有任何回报,请通过检查然后拯救来保护它。
function show_coverage() {
$coverage = get_post_meta( get_the_ID(), 'wpcf-coverage-area' );
if ( ! $coverage ) {
return;
}
echo '<span class="extra-info-head">Coverage Area:</span>';
foreach ( $coverage as $key => $value ) {
echo $value . '<br/>';
}
}
现在,让我们对其他回调函数执行相同的处理:
function show_bulbs() {
$bulbs = get_post_meta( get_the_ID(), 'wpcf-light-bulbs' );
if ( ! $bulbs ) {
return;
}
echo '<span class="extra-info-head">Light Bulbs:</span> ';
foreach ( $bulbs as $key => $value ) {
echo $value;
}
}
现在上面的函数将获取自定义字段(即元数据)。如果它不存在,你就会纾困。否则,您开始构建HTML标记并将其呈现给浏览器。