it-swarm.asia

كيفية عرض منشور واحد على الصفحة الأولى ولكن مع ترحيل صفحات عادي؟

أرغب في الحصول على منشور واحد على صفحتي الأولى (دائمًا الأحدث) ، لكن دع العمل العادي للترحيل. إذن الصفحة الأولى لها منشور 1 ، يجب أن تحتوي الصفحة التالية على منشور 2-11 (1-10 جيد جدًا) ، ثم 12-21 أو 11-20 ، وهكذا. أعلم أنني أستطيع تغيير عدد المنشورات اعتمادًا على السياق ، ولكن تعيين هذا على "1" على الصفحة الرئيسية يعني أن الصفحات الإضافية تعرض أيضًا منشورًا واحدًا فقط.

مشكلتي الرئيسية هي أن /page/2/ وما إلى ذلك يعمل ، ولكن /page/1/ دائمًا ما يعيد التوجيه إلى الصفحة الرئيسية الحقيقية ، /. هذا يعني أن المنشورات 2-10 يتم تخطيها دائمًا ، حيث تعرض الصفحة 2 11-20. أنا حاليًا أقوم بحل هذا عن طريق الارتباط بأرشيفي ، لكن هذا ليس مثاليًا عندما تصل المشاركات الأولى من السنة وهناك عدد أقل من المشاركات ولا توجد طريقة واضحة للمتابعة.

8
Jan Fabry

لقد قمت بحلها باستخدام معلمة الاستعلام offset . هذا سمح لي بتحرير الاستعلام في الرابط pre_get_posts ، ويبدو أنه أنظف طريقة للقيام بذلك ، دون استعلام جديد. الآن تعرض الصفحة الرئيسية منشورًا واحدًا فقط ، و page/2/ تعرض المنشورات 2-11. جميع الروابط تستمر في العمل ، لا يلزم أي تعديل آخر.

add_action('pre_get_posts', 'set_offset_on_front_page');
function _set_offset_on_front_page(&$query)
{
    if (is_front_page() && is_paged()) {
            $posts_per_page = isset($query->query_vars['posts_per_page']) ? $query->query_vars['posts_per_page'] : get_option('posts_per_page');
            // If you want to use 'offset', set it to something that passes empty()
            // 0 will not work, but adding 0.1 does (it gets normalized via absint())
            // I use + 1, so it ignores the first post that is already on the front page
            $query->query_vars['offset'] = (($query->query_vars['paged'] - 2) * $posts_per_page) + 1;
    }
}
6
Jan Fabry

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

  1. إنشاء صفحة جديدة تسمى الصفحة الرئيسية ووضع نص الترحيب على ذلك.
  2. إلغاء تنشيط الصفحة الرئيسية الافتراضية وتعيين الصفحة الرئيسية المخصصة لي كصفحة البداية
  3. إنشاء قالب صفحة جديد (تم نسخه وتعديله)
    1. دعها تعرض نص الصفحة
    2. قم بتحميل ثلاثة أحدث المشاركات من الفئة X وعرضها
    3. لديك رابط "المزيد" أسفله روابط على/category/category-x /

يشبه هذا: http://hinek.de (الصفحة في الألمانية ، آسف)

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

3
Hinek

أفترض أنك تقوم بتشغيل Wordpress 3.0.x؟

من السهل عرض منشور واحد فقط (في أي فئة) على الصفحة الأولى. استخدم query_posts('post_per_page=1') في ملف home.php الخاص بك بدلاً من استدعاء get_template_part('loop').

لاتباع طرق الترحيل العادية بعد ذلك صعبة بعض الشيء. في ملف loop.php ، أقترح وضع <?php global $paged; ?> قبل بيان <?php if (have_posts()) : ?> ، واستخدام المتغير $paged و query_posts() لتعديل استفسارك حتى يعرض المنشورات الصحيحة.

سيبدو ملف loop.php الخاص بك مثل هذا (ملاحظة: لم يتم اختباره):

<?php
global $paged;

if (!is_front_page() && $paged && $post->post_type == 'post') :
    query_posts('posts_per_page=10&paged=' . ($paged - 1));
    if (have_posts()) :
        while (have_posts()) : the_post();
        // Rest of the loop
        endwhile;
    endif;
endif;
?>

لقد استخدمت $paged - 1 لمجرد أن الصفحة 2 ستظهر المشاركات 1 - 10 ، وستعرض الصفحة 3 المشاركات 11 - 20 ، وهكذا.

1
john010117

هذا السؤال قديم بعض الشيء ، ولكن بالنسبة لأولئك الذين وجدوا هذا في العصر الحديث ، يجب ألا تتصل query_posts . من مخطوطة وورد:

query_posts () هي طريقة مفرطة التبسيط ومشاكل لتعديل الاستعلام الرئيسي للصفحة عن طريق استبداله بمثيل جديد من الاستعلام. إنه غير فعال (إعادة تشغيل استعلامات SQL) وسيفشل بشكل صريح في بعض الحالات (خاصةً في كثير من الأحيان عند التعامل مع ترقيم الصفحات المنشور).

...

TL ؛ DR لا تستخدم query_posts () على الإطلاق ؛

بدلاً من ذلك ، يجب عليك استخدام ربط pre_get_posts في jobs.php كما يلي:

function hwl_home_pagesize( $query ) {
    // Behave normally for secondary queries
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_home() ) {
        // Display only 1 post for the home page
        $query->set( 'posts_per_page', 1 );
        return;
    }

    // Otherwise, use whatever is set in the Wordpress Admin screen
    $query->set( 'posts_per_page', get_option('posts_per_page'); );
}
add_action( 'pre_get_posts', 'hwl_home_pagesize', 1 );

ومع ذلك ، احذر أنه في بعض الحالات ، (مثل ضبط إزاحة المنشورات) ، فإن استخدام رمز pre_get_posts يمكن أن يربط بين الصفحات. إصلاح هذا ليس بالأمر الصعب ، ولكنه شيء يجب أن تكون على دراية به. يوجد مثال لكيفية إصلاح هذا هنا .

0
lfalin