Siaavash

نمایش متفاوت آخرین پست در صفحه اصلی

11 پست در این موضوع قرار دارد

داخل صفحه اصلی می خوام پست آخر رو به صورت متفاوت نمایش بدم. برای این کار از دو تا query استفاده کردم به صورت زیر:

<?php 
						$query1 = new WP_Query( array( 'posts_per_page' => 1 ) );
						if ( $query1->have_posts() ) :

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

							<?php
							endif;

							/* Start the Loop */
							while ( $query1->have_posts() ) : $query1->the_post();

								get_template_part( 'template-parts/content-first', get_post_format() );

							endwhile;

							// the_posts_navigation();
							get_template_part( 'template-parts/first-post-ads');

						else :

							get_template_part( 'template-parts/content-first', 'none' );

						endif;
						wp_reset_postdata();


						$query2 = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 1 ) );
						if ( $query2->have_posts() ) :

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

							<?php
							endif;

							/* Start the Loop */
							while ( $query2->have_posts() ) : $query2->the_post();

								get_template_part( 'template-parts/content', get_post_format() );

							endwhile;

							the_posts_navigation();

						else :

							get_template_part( 'template-parts/content', 'none' );

						endif;
						wp_reset_postdata();

					 ?>
                    

 

با این کار به هدفم رسیدم، اما می خوام بدونم راه دیگه ای برای این کار وجود نداره؟

0

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

در 1 ساعت قبل، Siaavash گفته است :

داخل صفحه اصلی می خوام پست آخر رو به صورت متفاوت نمایش بدم. برای این کار از دو تا query استفاده کردم به صورت زیر:

 

با این کار به هدفم رسیدم، اما می خوام بدونم راه دیگه ای برای این کار وجود نداره؟

باسلام

اگر تغییرات فقط در حد استایل(css) باشه یک query کافیه با first-child در css میتونید اولین مطلب در کلاس رو تغییر بدید لینک منبع w3

ویرایش شده در توسط nazanin123
1

به اشتراک گذاری این پست


لینک به پست
در 2 دقیقه قبل، nazanin123 گفته است :

باسلام

اگر تغییرات فقط در حد استایل(css) باشه یک query کافیه با first-child در css میتونید اولین مطلب در کلاس رو تغییر بدید لینک منبع w3

تغییرات فراتر از استایل هست.

در این صورت چطور؟ آیا راه دیگه ای هم وجود داره؟ یا این راهی که انتخاب کردم بهترین راه هست؟

0

به اشتراک گذاری این پست


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

تغییرات فراتر از استایل هست.

در این صورت چطور؟ آیا راه دیگه ای هم وجود داره؟ یا این راهی که انتخاب کردم بهترین راه هست؟

نه ، باید دو کوئری بگیرید

1

به اشتراک گذاری این پست


لینک به پست

آیا این دو کوئری که بالاتر قرار دادم ایرادی داره؟

چون وقتی می زنم صفحه دوم وبلاگ رو نمایش بده، توی آدرس بار می زنه page2 اما همون صفحه اصلی و مطالب رو نشون می ده.

0

به اشتراک گذاری این پست


لینک به پست
در 7 ساعت قبل، Siaavash گفته است :

آیا این دو کوئری که بالاتر قرار دادم ایرادی داره؟

چون وقتی می زنم صفحه دوم وبلاگ رو نمایش بده، توی آدرس بار می زنه page2 اما همون صفحه اصلی و مطالب رو نشون می ده.

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

با کد زیر باید قاعدتا رفع بشه:

		$currentPage = (get_query_var('paged')) ? get_query_var('paged') : 1;
		$args = array('posts_per_page' => 3, 'paged' => $currentPage);
		query_posts($args);

اما چون دو تا کوئری ایجاد کردم، با رفتن به صفحه دوم، فقط پست اول که بالای سایت هست و مربوط به کوئری اول، تغییر می کنه و 5 تا پست بعدی که مربوط به کوئری دوم هستند، هیچ تغییری نمی کنن!

0

به اشتراک گذاری این پست


لینک به پست

با توجه به این مشکل و اینکه قاعدتا بعد از رفتن به صفحه دوم، دو حالت برای اون جایگاه پست (تکی بالا) وجود داره که کدوم پست رو باید نشون بده:

1- آخرین پست منتشر شده نسبت به کل نوشته های وبلاگ (یعنی آخرین پست همیشه (به صورت متفاوت) توی صفحات بعدی هم نمایش داده بشه)

2- آخرین پست منتشر شده نسبت به اون صفحه ای که داخلش هست (6پست اخیر) (یعنی توی هر صفحه از نوشته های قبلی، یک پست متفاوت، اون بالا به صورت مجزا و متفاوت نمایش داده بشه)

برای هر حالت چه راه حلی پیشنهاد می شه؟

 

 

 

0

به اشتراک گذاری این پست


لینک به پست

کاری می خوام انجام بدم شبیه عکس زیر هست.

کادر بالا پست آخر صفحه اصلی و کادرهای قرمز، پست های بعدی هستند. دو کادر کوچیک زیر پست بالا هم بنر هستند.

برای این کار از کد زیر استفاده کردم:

<?php
						
						$currentPage = (get_query_var('paged')) ? get_query_var('paged') : 1;
						$args = array('posts_per_page' => 1, 'paged' => $currentPage);
						query_posts($args);
						if ( have_posts() ) :

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

							<?php
							endif;

							/* Start the Loop */
							while ( have_posts() ) : the_post();

								get_template_part( 'template-parts/content-first', get_post_format() );

							endwhile;

							// the_posts_navigation();
							get_template_part( 'template-parts/first-post-ads');

						else :

							get_template_part( 'template-parts/content-first', 'none' );

						endif;

						wp_reset_postdata();
						


						$currentPage2 = (get_query_var('paged')) ? get_query_var('paged') : 1;
						$args1 = array('posts_per_page' => 5, 'paged' => $currentPage2);
						query_posts($args1);
						if ( have_posts() ) :

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

							<?php
							endif;

							/* Start the Loop */
							while ( have_posts() ) : the_post();

								get_template_part( 'template-parts/content', get_post_format() );

							endwhile;

							the_posts_navigation();

						else :

							get_template_part( 'template-parts/content', 'none' );

						endif;
						wp_reset_postdata();

					 ?>

با این کار مشکل صفحه بندی حل شد اما مشکلی که هست اینه که وقتی این کد رو می ذارم، پست اول دوبار تکرار می شه! و وقتی توی کوئری پایین از 'offset' => 1 استفاده می کنم، صفحه های بعدی دوباره پست های صفحه اصلی رو نمایش می ده در کادرهای قرمز رنگ!

 

چطور می تونم این سیستم رو پیاده کنم؟

راهی هست که پست آخر رو شناسایی کنه و اگر پست آخر بود یه قالب برای نمایش استفاده کنه در غیر این صورت از یه قالب دیگه؟

layout.jpg

0

به اشتراک گذاری این پست


لینک به پست

سلام و درود

 

وقتی شما توی آرگومان حلقه ای از آفست استفاده کنی اون حلقه قابلیت صفحه بندیشو از دست میده.

راهکاری که من به نظرم میرسه بیا توی حلقه اول تاریخ پست اولی رو بگیر بعد توی آرگومان حلقه دوم با استفاده از tax_query و before حلقه دوم رو قبل از ارسال پست توی حلقه اول ببر.

یعنی در اصل حلقه دوم اصلا شامل پست اول نشه.

 

موفق باشی

1

به اشتراک گذاری این پست


لینک به پست

مشکل رو از طریق کد زیر حل کردم:

					<?php
						
						if ( have_posts() ) :

							?>
								<header>
									<h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
								</header>

							<?php
							

							/* Start the Loop */
							while ( have_posts() ) : the_post();
							$last_post = reset($wp_query->posts);
							if ($last_post->ID == $post->ID) {

								get_template_part( 'template-parts/content-first', get_post_format() );

								get_template_part( 'template-parts/first-post-ads');
							} else {

								get_template_part( 'template-parts/content', get_post_format() );
							}

							endwhile;

							// the_posts_navigation();
							the_posts_navigation();

						else :

							get_template_part( 'template-parts/content-first', 'none' );

						endif;
						
						wp_reset_postdata();
					

					 ?>

 

یعنی با اضافه کردن کد زیر به حلقه، هم نیازم به کوئری از بین رفت، هم اینکه اون مشکل حل شد و آخرین پست ارسالی داخل صفحه رو به صورت متفاوت نمایش می ده و هم مشکل صفحه بندی از بین رفت:

							$last_post = reset($wp_query->posts);
							if ($last_post->ID == $post->ID) {

								get_template_part( 'قالب پست اول', get_post_format() );

							} else {

								get_template_part( 'قالب مابقی پست ها', get_post_format() );
							}

 

1

به اشتراک گذاری این پست


لینک به پست

درود مجدد

 

احسنت حرکت قشنگی بود.

0

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری