2017-06-05 38 views
0

我有一個和if語句的按鈕。如果語句使用php和高級自定義字段在wordpress - 隱藏空字段

如果兩個高級自定義字段都存在,我希望它顯示按鈕,如果沒有,我希望它隱藏,但我在這裏掙扎。

我已經看過此頁:

https://www.advancedcustomfields.com/resources/hiding-empty-fields/

這裏是我的代碼:

<?php if(get_field('button_link') && get_field('button_text')): ?> 
    <a href="<?php the_field('button_link'); ?>" class="btn third-btn mx-auto"> 
    <?php the_field('button_text');?> <i class="fa fa-arrow-circle-right" aria-hidden="true"></i> 
    </a> 
<?php endif; ?> 

任何人有一個建議嗎?

乾杯:)

+0

我喜歡用get_post_meta()來代替,似乎更清楚我,但檢出這裏「值存在」選項:https://開頭WWW .advancedcustomfields.com/resources/get_field/- 您的button_link和button_text字段可能會返回空數組或字符串,而不是布爾值false - 因此它將評估您的if塊。 – JDev518

+0

鏈接和文本都需要填充以便語句評估爲true。你是說即使這些值是空的,你的按鈕也會呈現嗎?我會調試這個語句(xdebug,var_dump或者echo'get_field('button_link')'和'get_field('button_text')')的結果,因爲它們必須包含一個真正的值(boolean true,非空字符串,或者正整數) –

+0

我沒有看到任何錯誤的代碼它應該顯示按鈕時,button_link和button_text字段不是空的,使用print_r(get_filed('button_link'));和print_r(get_filed('button_text'));看到如果他們有價值 –

回答

1

我不是ACF專家,但看get_field()函數的描述在這裏https://www.advancedcustomfields.com/resources/get_field/它看起來像函數的說明提到絕不會返回一個布爾值,我引述:

返回指定字段的值

因爲它不返回一個布爾值,你不能保證get_field(「東西」)& & get_field('something2')將是正確的布爾值。 if語句解釋爲布爾值true或false有一定的值。例如,null和0被解釋爲false,但-1解釋爲true。我會建議做一個

var_dump(get_field('button_link')) 

探索輸出。另外,根據下https://www.advancedcustomfields.com/resources/get_field/「檢查是否存在價值」,你可以檢查一個值存在,所以這可能工作:

<?php if (get_field('button_link')) : ?> 
    <?php if (get_field('button_text')) : ?> 
     <a href="<?php the_field('button_link') ?>" class="btn third-btn mx-auto"> 
      <?php the_field('button_text') ?> <i class="fa fa-arrow-circle-right" aria-hidden="true"></i> 
     </a> 
    <?php endif ?> 
<?php endif ?> 

它就像一個嵌套和不使用& &操作。如果這行不通,我們需要更多的信息,關於你得到什麼:

var_dump(get_field('button_link')); 
var_dump(get_field('button_text')); 
+0

Máximo你已經保存了一天!感謝您的回答,我只是將其添加到我的模板中,並在用戶的角度進行測試,並且完美地工作!我確實想過要像這樣嵌套它,但沒有嘗試它!歡呼的幫助。 - 將標記爲回答:)乾杯! – user3502952

+0

歡迎您,很高興我能提供幫助。如果你想避免多個嵌套的AND,你可以編寫一個迷你函數,例如:'function is_field_set($ field){return($ field)?真假; }'這樣你就可以安全地做'if(is_field_set(get_field('one'))&& is_field_set(get_field('two')))...' –

+0

是的,第一個解決方案是完美的 - 再次歡呼:) – user3502952

相關問題