【问题标题】:Hide Custom Field if Empty on WordPress如果在 WordPress 上为空,则隐藏自定义字段
【发布时间】:2016-12-13 01:56:02
【问题描述】:

我编写了两个函数来在每个产品下方的商店页面上显示自定义字段,可以查看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 自定义字段帖子的后端选项的组合解决了这个问题。

【问题讨论】:

  • 您如何确定这些字段何时不适用?从你的问题中不清楚。另外,仅供参考:你的代码格式会让你在路上做噩梦。我强烈建议选择一种样式并使用一致的缩进。根据经验,如果您在一行中看到}},您可能做错了事。
  • 谢谢你,埃德!感谢您对格式的说明。其中一些是从它如何从我的文本编辑器中复制过来的,导致它不一致,但我明白你的意思。而且我目前还没有确定这些字段何时不适用。这就是我试图弄清楚如何处理我当前的代码。我所写的只是允许它们存在的函数。
  • 这里很难知道该告诉你什么;我们需要知道您如何确定哪些产品具有这些字段,然后我们才能告诉您如何在适当的时候显示或隐藏它们。如果您为没有灯泡的产品执行var_dump($custom_fields['wpcf-light-bulbs']);,您会得到什么?有灯泡的产品呢?
  • 我在 WordPress 上安装的 WooCommerce 平台内的每个可编辑产品页面上都有一个文本输入框。我在这里截取了它的样子(oi64.tinypic.com/6zx2bp.jpg)。现在,如果我没有在输入框中输入任何内容,标签仍会显示在产品下方,因此我将 N/A 作为临时解决方案放入这些框中。附件和替换零件是这两类项目不适用。如果我仍然感到困惑,我深表歉意。非常感谢您迄今为止所提供的所有帮助和时间!

标签: php wordpress if-statement custom-fields


【解决方案1】:

不幸的是,每次我这样做时,代码都会破坏网站,因为它编写不正确。

您的网站出错了,因为您有一个“未声明的变量”。

在回调函数show_coverage() 中,您正在使用未定义的变量$post。函数不知道这个变量,因为你没有把它带入函数的作用域。

虽然您可以包含 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 标记并将其呈现给浏览器。

【讨论】:

  • 感谢您的帮助!不幸的是,这隐藏了所有数据,即使在 wpcf-light-bulbs 和/或 wpcf-coverage-area 中都提交了信息,也不会显示任何内容。在对代码进行了一些更改后,我能够让灯泡出现,但如果没有输入数据,“灯泡:”跨度仍然会出现。再次感谢您的帮助!
  • @TaylorCox 抱歉,我忘记了 show_coverage 函数中的 not ! 运算符。代码已更新。
  • 现在有东西出现了,但即使没有数据,标签仍然出现。再次感谢您!
  • 那么此时,您需要自行进行一些故障排除,以查看 (1) 帖子是否包含自定义字段(元数据)以及 (2) 中是否有任何内容。您还可以查看wp_postmeta 数据库表。搜索wpcf-light-bulbs。是否有带有该元键的帖子?
  • 只是一个更新:我能够通过浏览 WordPress 的后端并修改自定义字段选项来解决这个问题,而无需添加超出您提供的额外代码。再次感谢您的帮助!感谢您在这方面不遗余力!
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多