الحلقة The Loop – تطوير ثيمات ووردبريس الجزء السابع

تم نشرها من قبل : مرجع ووردبريس | في قسم تطوير ثيمات ووردبريس | آخر تحديث : الخميس مارس 4, 2021 | مدة القراءة 4 دقيقة
 الحلقة The Loop – تطوير ثيمات ووردبريس الجزء السابع

التكرار الحلقي ( الحلقة The Loop )هو الآلية الافتراضية التي يستخدمها ووردبريس لإخراج المنشورات من خلال ملفات قالب الثيم . يتم تحديد عدد المشاركات التي يتم استردادها من خلال عدد المشاركات التي يتم عرضها لكل صفحة محددة في إعدادات القراءة. داخل الحلقة ، يسترد ووردبريس كل منشور ليتم عرضه على الصفحة الحالية وينسقه وفقًا لتعليمات المظهر الخاص بك.

تستخرج الحلقة بيانات كل منشور من قاعدة بيانات ووردبريس وتدرج المعلومات المناسبة بدلاً من كل علامة قالب. ستتم معالجة أي كود HTML أو PHP في The Loop لكل منشور.

لتوضيح الأمر ببساطة ، فإن الحلقة تكون صحيحة بالنسبة إلى اسمها: فهي تدور عبر كل منشور تم استرداده للصفحة الحالية واحدًا تلو الآخر وينفذ الإجراء المحدد في المظهر الخاص بك.

يمكنك استخدام الحلقة The Loop لعدد من الأشياء المختلفة ، على سبيل المثال من أجل:

  • عرض عناوين ومقتطفات المنشورات على الصفحة الرئيسية لمدونتك ؛
  • عرض المحتوى والتعليقات على منشور واحد ؛
  • عرض المحتوى على صفحة فردية باستخدام علامات القالب ؛ و
  • عرض البيانات من أنواع المنشورات المخصصة و الحقول المخصصة.

يمكنك تخصيص الحلقة عبر ملفات القالب لعرض محتوى مختلف ومعالجته.

الحلقة The Loop بالتفصيل #

<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        // Display post content
    endwhile; 
endif; 
?>

تشير هذه الحلقة إلى أنه عندما تكون هناك مشاركات ، قم بالمرور عليها وعرضها. مقسمة إلى مزيد من التفاصيل:

  • تتحقق الوظيفة have_posts () من وجود أية مشاركات.
  • إذا كانت هناك منشورات ، تستمر حلقة while في التنفيذ طالما أن الشرط الموجود في الأقواس صحيح منطقيًا. طالما بقيت have_posts () صحيحة ، ستستمر الحلقة.

استخدام الحلقة The Loop #

يجب وضع الحلقة في index.php وفي أي ملف قالب أخرتُستخدم لعرض معلومات المنشور و على سبيل المثال:

<?php 
get_header();
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        // Display post content
    endwhile; 
endif; 
?>

في المثال أعلاه ، تظهر نهاية الحلقة مع endwhile  و endif. يجب أن تبدأ الحلقة دائمًا بنفس عبارات if و while ، كما هو مذكور أعلاه ويجب أن تنتهي بنفس عبارات النهاية.

يجب أن توجد أي علامات القالب قد ترغب في تطبيقها على جميع المنشورات بين عبارات البداية والنهاية.

<?php
get_header();
 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_content();
    endwhile;
else :
    _e( 'Sorry, no posts matched your criteria.', 'textdomain' );
endif;
 
get_sidebar();
get_footer();
?>

ما يمكن أن تعرضه الحلقة The Loop #

يمكن أن تعرض الحلقة عددًا من العناصر المختلفة لكل منشور. على سبيل المثال ، بعض علامات القوالب الشائعة المستخدمة في العديد من السمات هي

next_post_link()  
previous_post_link()  
the_category() 
the_author()  
the_content()  
the_excerpt() 
the_ID()  
the_meta() 
the_shortlink()  
the_tags()  
the_title()  
the_time()  

يمكنك أيضًا استخدام العلامات الشرطية ، مثل:

is_home() 
is_admin() 
is_single() 
is_page() 
is_page_template() 
is_category() 
is_tag()
is_author()
is_search()
is_404() 
has_excerpt()

أمثلة الحلقة The Loop #

<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        the_title( '<h2>', '</h2>' ); 
        the_post_thumbnail(); 
        the_excerpt();
    endwhile; 
else: 
    _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); 
endif; 
?>
<?php 
if ( have_posts() ) : 
    while ( have_posts() ) : the_post(); 
        the_title( '<h1>', '</h1>' ); 
        the_content();
    endwhile; 
else: 
    _e( 'Sorry, no pages matched your criteria.', 'textdomain' ); 
endif; 
?>
<?php
// Start the Loop.
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        /* * See if the current post is in category 3.
          * If it is, the div is given the CSS class "post-category-three".
          * Otherwise, the div is given the CSS class "post".
        */
        if ( in_category( 3 ) ) : ?>
        <div class="post-category-three">
        <?php else : ?>
        <div class="post">
        <?php endif; 
 
            // Display the post's title.
            the_title( '<h2>', ';</h2>' ); 
 
            // Display a link to other posts by this posts author.
            printf( __( 'Posted by %s', 'textdomain' ), get_the_author_posts_link() );
 
            // Display the post's content in a div.
            ?>
            <div class="entry">
                <?php the_content() ?>
             </div>
     
            <?php
            // Display a comma separated list of the post's categories.
            _e( 'Posted in ', 'textdomain' ); the_category( ', ' ); 
 
        // closes the first div box with the class of "post" or "post-cat-three"
       ?>
       </div>
 
    <?php 
    // Stop the Loop, but allow for a "if not posts" situation
    endwhile; 
 
else :
    /*
      * The very first "if" tested to see if there were any posts to
      * display. This "else" part tells what do if there weren't any.
     */
     _e( 'Sorry, no posts matched your criteria.', 'textdomain' );
  
// Completely stop the Loop.
 endif;
?>
<?php
// The main query.
if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_title();
        the_content();
    endwhile;
else :
    // When no posts are found, output this text.
    _e( 'Sorry, no posts matched your criteria.' );
endif;
wp_reset_postdata();                                                        
 
/*
 * The secondary query. Note that you can use any category name here. In our example,
 * we use "example-category".
 */
$secondary_query = new WP_Query( 'category_name=example-category' );        
 
// The second loop. 
if ( $secondary_query->have_posts() )
    echo '<ul>';
    while ( $secondary_query->have_posts() ) : $secondary_query->the_post();
        the_title( '<li>', '</li>' );
     endwhile;
     echo '</ul>';
endif;
wp_reset_postdata();
?>
<?php 
// Example argument that defines three posts per page. 
$args = array( 'posts_per_page' => 3 ); 
 
// Variable to call WP_Query. 
$the_query = new WP_Query( $args ); 
 
if ( $the_query->have_posts() ) : 
    // Start the Loop 
    while ( $the_query->have_posts() ) : $the_query->the_post(); 
        the_title(); 
        the_excerpt(); 
    // End the Loop 
    endwhile; 
else: 
// If no posts match this query, output this text. 
    _e( 'Sorry, no posts matched your criteria.', 'textdomain' ); 
endif; 
 
wp_reset_postdata(); 
?>

الدرس السابق : علامات القالب – تطوير ثيمات ووردبريس الجزء السادس

الدرس التالي :