رفتن به مطلب

عدم نمایش مطالب ظاهر شده در اسلایدر، در صفحه اصلی


پست های پیشنهاد شده

سلام

اگر بخواهیم مطالبی که در حال حاضر در اسلایدر است، در صفحه اصلی نمایش داده نشود، از چه کوئری باید استفاده کنیم؟

یک دسته اختصاص به مطالب اسلایدر دارد و فرضاً ۵ عدد از مطالب این دسته، در اسلایدر نمایش داده می‌شود. اگر بخواهیم تا وقتی که این پنج مطلب در اسلایدر هست، در مطالب صفحه اصلی نمایش  داده نشود،

باید از چه دستوری استفاده کنیم؟

منظور، استثناء کردن تعداد مشخصی از مطالب دسته اسلایدر است.

 

متشکرم.

 

لینک به ارسال

دوستان! توی اینترنت مطلبی را برای حل این مسئله پیدا کردم. راه حلش اینه که در کوئری اول که اسلایدر را می‌سازه، ID های  مربوط به هر پست را در یک متغیر ذخیره کنیم. به این صورت:

<?php
$do_not_duplicate = array(); // set befor loop variable as array

// 1. Loop
query_posts('ca=1,2,3&showposts=5');
while ( have_posts() ) : the_post();
    $do_not_duplicate[] = $post->ID; // remember ID's in loop
    // display post ...
    the_title();
endwhile;
?>

بعد، در کوئری دوم که مربوط می‌شه به مطالب اصلی صفحه، چک کنیم که کوئری استخراج شده، شامل ID های ذخیره شده در آرایه نباشد. به این صورت:

<?php
// 2. Loop
// another loop without duplicates
query_posts( array(
    'cat' => 456,
    'post__not_in' => $do_not_duplicate
    )
);
while ( have_posts() ) : the_post();
    // display posts...
        the_title();
endwhile;
?>

این کد به راحتی کار می‌کنه، البته اگر که هر دوتا کوئری داخل یک فایل باشد.

اما مشکل اینجاست که من کوئری مربوط به اسلایدر را در فایل header.php قرار دادم و کوئری مربوط به مطالب اصلی سایت در فایل index.php قرار دارد.

در این حالت،

$do_not_duplicate

مقدار null را بر می‌گرداند. چطور می‌تونم مقدار این آرایه را به فایل index.php منتقل کنم؟؟

لینک به ارسال

سلام ودرود خدمت شما

برای اینکه شما میخواهید پستی را ک به دسته اسلایدر اختصاص میدهید در صفحه اصلی منتشر نشه میتونید این کد را در فایل functions قالب  خود قرار دهید وای دی دسته مورد نظر قرار دهید:

<?php remove_action('wp_head', 'wp_generator');?>
<?php
 add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' );
function foo_modify_query_exclude_category( $query ) {
        if ( ! is_admin() && $query->is_main_query() && ! $query->get( 'cat' ) )
                $query->set( 'cat', '-10,-11,-20,-21' );
}
?>

موفق باشید

لینک به ارسال

دوست عزیز!

متشکرم از پاسخی که دادید.

اما همون طور که در متن سؤال آمده، من نمی‌خواهم به طور کامل دسته اسلایدر را از مطالب صفحه اصلی استثناء کنم.

بلکه پنج تا مطلبی که در دسته اسلایدر قرار دارند، در داخل اسلایدر نمایش داده می‌شود و تقریباً هر روز، این مطالب در حال اضافه شدن هستند.

من می‌خواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده می‌شوند، در صفحه اسلایدر نباشند. یعنی نمایش تکراری نداشته باشیم.

 

متشکرم.

لینک به ارسال
در ۱ ساعت قبل، pirooz گفته است :

من می‌خواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده می‌شوند، در صفحه اسلایدر نباشند. یعنی نمایش تکراری نداشته باشیم.

ببخشید! اصلاح می‌کنم: 

می‌خواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده می‌شوند، در صفحه اصلی نباشند. یعنی نمایش تکراری نداشته باشیم.

لینک به ارسال

دوست عزیز با این کدی من خدمت شما دادم هیچوقت پستی را ک به دسته اسلایدر اختصاص میدهید در صفحه اصلی نمایش داده نمیشود شما بالاخره یک کوئری زدید روی دیتابیس حالا مثلا 5پست اخر را ازدیتابیس بخونه برای اسلایدر وبه ترتیب نزولی 5اسالاید در اسلایدر نمایش داده شود/اگر منظورتون متوجه شده باشم/:P

ویرایش شده توسط mk-73
لینک به ارسال

دوست عزیز!

من که هر روز دسته‌های اسلایدر را از مطالب قبلی حذف نمی‌کنم. فقط مطالب جدید را که باید در اسلایدر نمایش داده بشود را تیک دسته اسلایدر را میزنم.

حالا می‌خواهم فقط پنج‌تای آخر (که در اسلایدر نمایش داده می‌شود)، در مطالب صفحه اصلی نمایش داده نشود.

نه اینکه کلاً هر مطلبی که دسته اسلایدر دارد در صفحه اصلی نمایش داده نشود. :huh:

لینک به ارسال
در در 1/30/2016 at 17:17، pirooz گفته است :

 


<?php
// 2. Loop
// another loop without duplicates
query_posts( array(
    'cat' => 456,
    'post__not_in' => $do_not_duplicate
    )
);
while ( have_posts() ) : the_post();
    // display posts...
        the_title();
endwhile;
?>

این کد به راحتی کار می‌کنه، البته اگر که هر دوتا کوئری داخل یک فایل باشد.

اما مشکل اینجاست که من کوئری مربوط به اسلایدر را در فایل header.php قرار دادم و کوئری مربوط به مطالب اصلی سایت در فایل index.php قرار دارد.

در این حالت،

$do_not_duplicate

مقدار null را بر می‌گرداند. چطور می‌تونم مقدار این آرایه را به فایل index.php منتقل کنم؟؟

اگر این قسمت از مشکل من حل بشه، به جواب خودم رسیدم.

مشکلم اینه که وقتی دوتا حلقه در یک فایل، مثلاً index.php قرار دارد، دقیقاً داره کار می‌کنه. اما وقتی که کد ۱ را در حلقه اول و در فایل header.php و کد ۲ را در حلقه دوم و در فایل index.php قرار می‌دهم، مقدار $do_not_duplicate خالی هست. :blink:

لینک به ارسال

خب! بالاخره راه حل این مشکل را هم پیدا کردم.

اینجا اعلام کنم تا بقیه هم استفاده کنند.

کافی است عبارت global را هنگام تعریف متغیر، به کار ببریم.

بنابراین، کل کد به این صورت میشه:

 

global $do_not_duplicate;
$do_not_duplicate = array(); // set befor loop variable as array

// Loop 1
query_posts('ca=1,2,3&showposts=5');
while ( have_posts() ) : the_post();
    $do_not_duplicate[] = $post->ID; // remember ID's in loop
    // display post ...
    the_title();
endwhile;






// Loop 2
// another loop without duplicates
query_posts( array(
    'cat' => 456,
    'post__not_in' => $do_not_duplicate
    )
);
while ( have_posts() ) : the_post();
    // display posts...
        the_title();
endwhile;

 

در این حالت پست‌هایی که در حلقه اول نمایش داده می‌شوند، در حلقه دوم نمایش داده نخواهند شد.

 

ویرایش شده توسط pirooz
لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...