رفتن به مطلب

Siaavash

عضو سایت
  • تعداد ارسال‌ها

    55
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    1

نوشته‌ها ارسال شده توسط Siaavash

  1. مشکل اول رو با کد اضافه کردن کد زیر حل کردم:

    function add_custom_post_types_to_author_archive( $query ) {
        if ( is_author() && $query->is_main_query() ) {
            $query->set( 'post_type', array( 'post', 'page', 'custom_post_type_1', 'custom_post_type_2', 'custom_post_type_3' ) );
        }
    }
    add_action( 'pre_get_posts', 'add_custom_post_types_to_author_archive' );

     

    مشکل دوم هم از سمت خودم بود، دسته بندی رو برای پست مربوطه انتخاب نکرده بودم.

    • پسندیدن 1
  2. من برای ایجاد Custom Post Type از پلاگین CPT UI استفاده کردم. و برای هر کدوم دسته بندی مجزا هم تعریف ایجاد کردم. (Custom Taxonomy)

    اول پست تایپ "یک" رو ایجاد کردم به همراه دسته بندی و شروع کردم به طراحی قالبم. اما بعد متوجه شدم که این پست تایپ توی آرشیو کتگوری و برچسب ها نمایش داده نمی‌شه!

    بعد کد زیر رو وارد کردم:

    function my_cptui_add_post_types_to_archives( $query ) {
    	// We do not want unintended consequences.
    	if ( is_admin() || ! $query->is_main_query() ) {
    		return;    
    	}
    
    	if ( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    
    		// Replace these slugs with the post types you want to include.
    		$cptui_post_types = array( 'my_post_type', 'my_other_post_type' );
    
    		$query->set(
    	  		'post_type',
    			array_merge(
    				array( 'post' ),
    				$cptui_post_types
    			)
    		);
    	}
    }
    add_filter( 'pre_get_posts', 'my_cptui_add_post_types_to_archives' );
    function my_cptui_add_post_types_to_archives( $query ) {
    	// We do not want unintended consequences.
    	if ( is_admin() || ! $query->is_main_query() ) {
    		return;    
    	}
    
    	if ( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
    
    		// Replace these slugs with the post types you want to include.
    		$cptui_post_types = array( 'my_post_type', 'my_other_post_type' );
    
    		$query->set(
    	  		'post_type',
    			array_merge(
    				array( 'post' ),
    				$cptui_post_types
    			)
    		);
    	}
    }
    add_filter( 'pre_get_posts', 'my_cptui_add_post_types_to_archives' );

    مشکل رفع شد.

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

     

    چند تا مورد و مشکل دارم در حال حاضر که درست متوجه نمی شم.

    1- در حال حاضر با اضافه کردن slug پست تایپ "دو" و "سه" به کد بالا، باز هم توی آرشیو دسته بندی ها و برچسب ها نمایش داده نمی شن این دو تای جدید! مشکل چیه؟

    2- برای پست تایپ "دو" وقتی روی دسته بندی مربوطه کلیک می کنم، توی صفحه بعضی از دسته بندی‌ها پست مربوطه رو نمایش می‌ده و توی بعضی از دسته بندی‌ها نمایش نمی‌ده! مشکل این یکی دقیقا از کجاست؟

     

  3. برای گرفتن و نمایش عکس‌های هر پست یه تابع تعریف کردم به صورت زیر که در فایل functions.php قرار دادم که به درستی عکس رو نشون می ده.

    function revthumb_get_images($post_id) {
        global $post;
    
         $thumbnail_ID = get_post_thumbnail_id();
     
         $images = get_children( array('post_parent' => $post_id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
     
         if ($images) :
             
             $imgidn = 1;
     
             foreach ($images as $attachment_id => $image) :
                 
                 $imgidn++;
                 
            
     
             if ( $image->ID != $thumbnail_ID ) :
     
                 $img_alt = get_post_meta($attachment_id, '_wp_attachment_image_alt', true); //alt
                 if ($img_alt == '') : $img_alt = $image->post_title; endif;
     
                 $big_array = image_downsize( $image->ID, 'large' );
                 $img_url = $big_array[0];
     
                 echo '<a href="#image" class="lightbox" id="image';
                 echo $imgidn;
                 echo '">';
                 echo '<span style="background-image: url(\'';
                 echo $img_url;
                 echo '\')">';
                 echo '</a>';
                 echo '<a class="cssbox_close" href="#void"></a>';
                 echo '<a class="cssbox_prev" href="#image';
                 echo $imgidn-1;
                 echo '">p</a>';
                 echo '<a class="cssbox_next" href="#image';
                 echo $imgidn+1;
                 echo '">n</a>';
                 echo '</span>';
                 
     
         endif; endforeach; endif; 

    همه چیز درست کار می کنه و عکس نمایش داده می شه، اما یه مشکل دارم که نمی‌دونم دلیلش چیه دقیقا!

    اونم اینکه برای عکس قبلی و بعدی لینکی که تعریف کردم، آدرس توی کد درست هست، اما وقتی روی لینک کلیک می کنم (با موس روی لینک می‌رم) آدرس دیگه‌ای رو نمایش می‌ده!

    عکس پیوست رو ببینید.

    ممنون می‌شم  راهنمایی کنید که مشکل از کجاست.

    Untitled-1.jpg

  4. در 15 دقیقه قبل، asadiy4n گفته است :

    داخل href شما اصلا خروجی رو echo نکردید!

    
    <a href="<?php echo get_post_field( 'post_name', $post_id ); ?>" class="en">EN</a>

    بر فرض اینکه خروجی متغیر $post_id صحیح باشه کد بالا درست هست

    اگر بازم نتیجه ای نگرفتید به جای $post_id مستقیما ایدی پست رو به عنوان تست قرار بدید مثال

    
    <a href="<?php echo get_post_field( 'post_name', 1000 ); ?>" class="en">EN</a>

     

    درست بود! مشکل از این بود که من echo نکرده بودم.

     

  5. در 11 دقیقه قبل، asadiy4n گفته است :

    سلام

    خیلی راحت

    
    https://stackoverflow.com/questions/33842251/how-to-get-post-slug-from-post-in-wordpress

     

    این رو امتحان کرده بودم، کل آدرس رو بر می گردونه. من فقط قسمت آخر آدرس رو می خوام. اون قسمتی که توی Permalink هر پست می شه دستی تغییر داد.

  6. برای یک موردی نیاز به  به آخرین level از URL صفحه دارم که به عبارت بهتر PostName می شه.

    عنوان پست فارسی هست و توی قسمت Permalink عنوان انگلیسی به صورت دستی وارد می شه. چطور می تونم اون عنوان انگلیسی که توی قسمت Permalink توی پست وارد می شه رو به صورت جداگانه داشته باشم؟

  7. یک وبلاگ وجود داره که مطالب داخلش پست می شه. روی یک زیر دامنه از این وبلاگ یک فروشگاه با ووکامرس بالا اومده که روی یک سرور مجزا هست!

    می خوام داخل صفحه اصلی فروشگاه سه مطلب آخر وبلاگ رو نمایش بدم.

    بهترین راه برای این کار چیه؟

  8. داخل یک سایت آموزشگاهی یک صفحه رزرو و ثبت نام کلاس وجود داره که لیست کلاس های موجود برای سطوح مختلف، تاریخ شروع، روز و ساعت و شعبه تشکیل کلاس نمایش داده می شه. کلاس هایی که تکمیل ظرفیت نشدند دکمه رزرو براشون فعال هست.
    می خوام به طریقی این صفحه (صفحه جدول کلاس ها) هر مثلا 15 دقیقه مانیتور بشه و در صورتی که کلاسی در سطح X توی شعبه Y و ساعت Z برای ثبت نام فعال می شه رو اطلاع بده. (از طریق ایمیل یا SMS)

    به دو طریق صفحه مورد نظر قابل دسترسی هست:
    1- بدون ورود به پنل کاربری، که در این صورت تمام سطوح نمایش داده می شه و هر سطح جدول (HTML) خاص خودش رو داره که بالای جدول نام سطح نوشته شده و داخل جدول هم ستون یک کد سطح نمایش داده می شه (مثلا SPxxxx که S نشان دهنده سطح R لول داخلی سطح مثل سطح 1 لول 2 و x ها چند عدد هست که دقیق نمی دونم نشان دهنده چه چیزی هست)
    2- با ورود به پنل، که در این صورت فقط سطحی که مجاز به ثبت نام هستید رو نمایش می ده.

    به چه طریقی می تونم این کار رو انجام بدم؟

     

    یک خورده عجله ای هست!

  9. یک صفحه برای نمایش پروژه هست، که شامل متن، عکس و Thumbnail عکس های پروژه می شه!

    می خوام متن توی یک ستون لود بشه، تمام عکس ها به صورت یک اسلایدر داخل ستون وسط و thumbnail ها هم در ستون دیگه!

    به چه صورت می تونم این کار رو انجام بدم؟ که کاربر متن رو وارد کنه و تمام عکس ها رو هم داخل پست آپلود و وارد کنه، بعد به صورت اتوماتیک متن داخل ستون خودش قرار بگیره (div) تمام عکس ها داخل اسلایدر قرار بگیرند و بند انگشتی عکس ها هم ساخته و داخل ستون مربوطه فراخوانی بشن.

    بهترین راه برای انجام این کار چیه؟

    با استفاده از فرمت گالری توی post formats می شه این کار رو انجام داد؟

     

  10. یک سایت هست که چندین صفحه داره به صورت زیر:

    1- صفحه اصلی

    2- درباره ما

    3- تماس

    4- صفحه نمونه کارها

    5- صفحات هر نمونه کار

    منوی این سایت به صورت همبرگری طراحی شده. می خوام کاربر توی هر صفحه ای که هست وقتی روی منو کلیک می کنه لینک صفحات دیگه نمایش داده بشه. برای مثال:

    وقتی کاربر داخل صفحه اصلی هست لینک شماره های 2-3-4 نمایش داده بشه، و وقتی داخل صفحه تماس هست لینک شماره های 1-2-4 نمایش داده بشه و وقتی داخل صفحات 5 هست لینک شماره های 1-2-3-4 نمایش داده بشه داخل منو

     

    راه حل درست و اصولی برای پیاده کردن این مورد چیه؟

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

    					<?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
  12. کاری می خوام انجام بدم شبیه عکس زیر هست.

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

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

    <?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

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

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

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

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

     

     

     

  14. در 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 تا پست بعدی که مربوط به کوئری دوم هستند، هیچ تغییری نمی کنن!

  15. در 2 دقیقه قبل، nazanin123 گفته است :

    باسلام

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

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

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

  16. داخل صفحه اصلی می خوام پست آخر رو به صورت متفاوت نمایش بدم. برای این کار از دو تا 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();
    
    					 ?>
                        

     

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

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