pirooz 44 ارسال شده در بهمن 94 گزارش بازنشر ارسال شده در بهمن 94 سلام اگر بخواهیم مطالبی که در حال حاضر در اسلایدر است، در صفحه اصلی نمایش داده نشود، از چه کوئری باید استفاده کنیم؟ یک دسته اختصاص به مطالب اسلایدر دارد و فرضاً ۵ عدد از مطالب این دسته، در اسلایدر نمایش داده میشود. اگر بخواهیم تا وقتی که این پنج مطلب در اسلایدر هست، در مطالب صفحه اصلی نمایش داده نشود، باید از چه دستوری استفاده کنیم؟ منظور، استثناء کردن تعداد مشخصی از مطالب دسته اسلایدر است. متشکرم. نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 دوستان! توی اینترنت مطلبی را برای حل این مسئله پیدا کردم. راه حلش اینه که در کوئری اول که اسلایدر را میسازه، 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 منتقل کنم؟؟ نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 لطفاً.... نقل قول لینک به ارسال
mk-73 165 ارسال شده در بهمن 94 گزارش بازنشر ارسال شده در بهمن 94 سلام ودرود خدمت شما برای اینکه شما میخواهید پستی را ک به دسته اسلایدر اختصاص میدهید در صفحه اصلی منتشر نشه میتونید این کد را در فایل 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 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 دوست عزیز! متشکرم از پاسخی که دادید. اما همون طور که در متن سؤال آمده، من نمیخواهم به طور کامل دسته اسلایدر را از مطالب صفحه اصلی استثناء کنم. بلکه پنج تا مطلبی که در دسته اسلایدر قرار دارند، در داخل اسلایدر نمایش داده میشود و تقریباً هر روز، این مطالب در حال اضافه شدن هستند. من میخواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده میشوند، در صفحه اسلایدر نباشند. یعنی نمایش تکراری نداشته باشیم. متشکرم. نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 در ۱ ساعت قبل، pirooz گفته است : من میخواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده میشوند، در صفحه اسلایدر نباشند. یعنی نمایش تکراری نداشته باشیم. ببخشید! اصلاح میکنم: میخواهم مطالب دسته اسلایدر، تا زمانی که در داخل اسلایدر نمایش داده میشوند، در صفحه اصلی نباشند. یعنی نمایش تکراری نداشته باشیم. نقل قول لینک به ارسال
mk-73 165 ارسال شده در بهمن 94 گزارش بازنشر ارسال شده در بهمن 94 (ویرایش شده) دوست عزیز با این کدی من خدمت شما دادم هیچوقت پستی را ک به دسته اسلایدر اختصاص میدهید در صفحه اصلی نمایش داده نمیشود شما بالاخره یک کوئری زدید روی دیتابیس حالا مثلا 5پست اخر را ازدیتابیس بخونه برای اسلایدر وبه ترتیب نزولی 5اسالاید در اسلایدر نمایش داده شود/اگر منظورتون متوجه شده باشم/ ویرایش شده بهمن 94 توسط mk-73 نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 دوست عزیز! من که هر روز دستههای اسلایدر را از مطالب قبلی حذف نمیکنم. فقط مطالب جدید را که باید در اسلایدر نمایش داده بشود را تیک دسته اسلایدر را میزنم. حالا میخواهم فقط پنجتای آخر (که در اسلایدر نمایش داده میشود)، در مطالب صفحه اصلی نمایش داده نشود. نه اینکه کلاً هر مطلبی که دسته اسلایدر دارد در صفحه اصلی نمایش داده نشود. نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 در در 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 خالی هست. نقل قول لینک به ارسال
pirooz 44 ارسال شده در بهمن 94 مالک گزارش بازنشر ارسال شده در بهمن 94 (ویرایش شده) خب! بالاخره راه حل این مشکل را هم پیدا کردم. اینجا اعلام کنم تا بقیه هم استفاده کنند. کافی است عبارت 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; در این حالت پستهایی که در حلقه اول نمایش داده میشوند، در حلقه دوم نمایش داده نخواهند شد. ویرایش شده بهمن 94 توسط pirooz نقل قول لینک به ارسال
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .