WordPress開發入門06:條件判斷與迴圈

huangbangqing12發表於2018-07-08

任何語言都會有條件判斷語句,PHP也不例外。條件語句可以讓你測試某個條件是否為真,然後執行條件為真的程式碼。WordPress中最簡單,最常見的條件語句是 if 語句,或者 **if else **語句。

WordPress中條件語句的常見用途是:檢測是否有可用的釋出文章。虛擬碼就像這樣:

IF (There are posts)
    Echo post title
    Echo post content
ELSE
    Echo “Sorry no posts are available”

如果,那麼我們可以編寫程式碼來顯示這些文章。

如果沒有,則執行條件語句的else部分,並輸出一條訊息,提示沒有可用的釋出文章。

這個簡單的虛擬碼例子只適用於檢查和顯示單篇文章。但是大多數時候,在WordPress中,我們會把條件語句迴圈語句結合起來,因為我們要顯示的是文章的列表。

如何將條件語句與簡單迴圈語句相結合

在WordPress中找到的最簡單的迴圈是WHILE迴圈。虛擬碼就像這樣:

IF (There are posts)
    WHILE(Have post)
        Echo post title
        Echo post content
ELSE
    Echo “Sorry no posts are available”

只要給定的條件為真,while迴圈就會重複執行相同的程式碼。 所以,如果想要使用迴圈,可以像這樣使用WHILE迴圈。 之前的程式碼只能判斷一篇文章。 而現在的程式碼,只要有文章,我們就會通過程式碼不斷的顯示出來。

不過,這些只是虛擬碼,可能大家還沒有完全理解。 所以讓我們來結合WordPress主題中的一些實際程式碼,看看條件語句和WHILE迴圈是如何結合在一起的。

結合WordPress主題中的條件判斷與迴圈

所以,首先,可以登入WordPress後臺,來到主題,我們切換到 Twenty Fifteen 主題。

然後,我們來到對應的程式碼中,index.php是控制WordPress主頁面的模板。

預設情況下,它將控制部落格的主頁顯示的文章數目。

所以開啟這個檔案,來看看控制它的迴圈是如何工作的:

可以看到這裡以 if 條件語句和 have_posts 模板標籤開頭

                <?php if ( have_posts() ) : ?> /***if 條件語句和 have_posts 模板標籤開頭***/

            <?php if ( is_home() && ! is_front_page() ) : ?>
                <header>
                    <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
                </header>
            <?php endif; ?>

            <?php
            // Start the loop.
            while ( have_posts() ) : the_post();

                /*
                 * Include the Post-Format-specific template for the content.
                 * If you want to override this in a child theme, then include a file
                 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                 */
                get_template_part( 'content', get_post_format() );

            // End the loop.
            endwhile;

            // Previous/next page navigation.
            the_posts_pagination( array(
                'prev_text'          => __( 'Previous page', 'twentyfifteen' ),
                'next_text'          => __( 'Next page', 'twentyfifteen' ),
                'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>',
            ) );

        // If no content, include the "No posts found" template.
        else :
            get_template_part( 'content', 'none' );

        endif;  /***endif:表示條件判斷語句的結束***/
        ?>

拖到最下面,有一個endif:,表示條件語句的結束。所以這是最外層的if條件語句。

在程式碼之間我們可以看到也有else語句。

所以這段程式碼的大致意思是

如果有文章資料

那麼,這裡會執行到else之前的所有程式碼。

            <?php if ( is_home() && ! is_front_page() ) : ?>
                <header>
                    <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
                </header>
            <?php endif; ?>

我們可以看到另外一個條件語句是在這裡執行的,如果是home主頁並且不是front page,那麼輸出提示資訊。

                       // Start the loop.
            while ( have_posts() ) : the_post();

                /*
                 * Include the Post-Format-specific template for the content.
                 * If you want to override this in a child theme, then include a file
                 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                 */
                get_template_part( 'content', get_post_format() );

            // End the loop.
            endwhile;

然後,可以看到啟動迴圈。當有文章時,則執行以下操作。

所以這個while迴圈語句只是檢查是否有文章。只要我們有顯示的文章,while語句將繼續執行。

然而,可以看到while迴圈中只有一行程式碼:

                get_template_part( 'content', get_post_format() );

這行程式碼實際上會把:將要執行的操作放在不同的模板檔案中,該模板檔案將被命名為“content”,後面跟上Post格式。如果進入主題檔案中,可以看到有content-link。content-none,content-page,content-search,還有常規的content:

You must be logged in to view the hidden contents.

所以這裡將根據不同的格式來執行不同型別的檔案。

如果沒有文章資料

那麼就執行這個 get_template_part 找到一個名為(’content’,’none’)的檔案,也就是說,它會執行content-none這個模板檔案。

while語句詳解

為了講解while語句,我們需要在我們的網站上新增了三篇部落格文章。

建立完文章後,進入儀表盤,在“設定”下面的“閱讀”下,我們將部落格文章至多顯示更改為:1

來到部落格首頁,這裡只看到一篇文章,其實,這3篇文章被分開到不同的頁面顯示

同樣地,如果我改回為10,來到部落格首頁,你會看到部落格首頁會顯示全部的3篇文章。

這就剛好說明了這個while迴圈是如何工作的。

沒有文章資料的情況

如果刪除所有的文章,我們可以首頁提示:未找到

對應程式碼中,就是如果失敗,它將執行else中的語句。其中包括get_template_part(’content’,’none’)。也就是會執行content-none.php。

如果我們開啟了 content-none.php 檔案,我們可以看到它顯示“Nothing Found”(因為我的是中文版,所以會翻譯為“未找到”):

    <header class="page-header">
        <h1 class="page-title"><?php _e( 'Nothing Found', 'twentyfifteen' ); ?></h1>
    </header><!-- .page-header -->

get_template_part()模板標籤

如果你要開發自己的主題,你可能不會在這裡使用 get_template_part 附加模板,你可能會直接放置迴圈所需的實際程式碼。

但是WordPress還是建議大家使用模板檔案包含,而不是將所有程式碼直接包含在主迴圈中。這樣程式碼的結構將會簡單清晰

相關文章