Значение не возвращается из-за оператора double if while

#php #wordpress #advanced-custom-fields

Вопрос:

Этот код применим к ACF, где я пытаюсь создать 2 коротких кода, исходящих из одной и той же группы данных. Ниже возвращается только city значение, а не address_line . Я должен чувствовать, что это может сделать это с одинаковыми утверждениями if : while. Однако они выполняют 2 разные функции, я не уверен, почему это не работает. (Я изо всех сил старался найти похожие вопросы на этот, но не повезло, вероятно, потому, что я не понимаю проблемы).

 function city(){
    if( have_rows('address') ) :
        while( have_rows('address') ):
            the_row();
            $city = get_sub_field('city');
            if ( get_post_type() == 'listings' ) {
                return $city;
            }
        endwhile;
    endif;
}
add_shortcode('city','city');
    
function address_line(){
    if( have_rows('address') ) :
        while( have_rows('address') ):
            the_row();
            $address_line = get_sub_field('address_1');
            if ( get_post_type() == 'listings' ) {
                return $address_line;
            }
        endwhile;
    endif;
}
add_shortcode('address_line','address_line');
 

Комментарии:

1. Это очень странный стиль кода, и его очень трудно прочитать. Я думал, что это замаскированный цикл «сделай пока «, но, подумав об этом подробнее, «если» просто совершенно излишне. Но я не вижу ничего очевидного, что могло бы на самом деле остановить его работу, и вы не упомянули ни о каких ошибках, поэтому я могу только предположить, что проблема в другом месте, которое мы не видим. Может быть, просто нет никаких данных для ‘address_1’?

2. почему бы не вернуть массив и одну единственную функцию : function address_line(){ if( have_rows('address') ) : while( have_rows('address') ): the_row(); $city = get_sub_field('city'); $address_line = get_sub_field('address_1'); if ( get_post_type() == 'listings' ) { return [$address_line,$city]; } endwhile; endif; } add_shortcode('address_line','address_line');

3. @user2864740 Он добавил advanced-custom-fields тег, это ACF.

4. @AlivetoDie хорошо, но ваш шорткод будет запускать значения вместе, мне нужно 2 отдельных значения.

5. @IMSoP хороший комментарий; однако я проверил это, и они работают отдельно друг от друга, просто не вместе в данном конкретном случае.