প্রতি তৃতীয় পোস্টকে কীভাবে চিহ্নিত করবেন


17

আমি আমার ব্যান্ডের জন্য একটি ওয়ার্ডপ্রেস সাইটে কাজ করছি এবং আমি আমাদের ব্লগ পৃষ্ঠায় প্রতিটি তৃতীয় পোস্ট চিহ্নিত করতে চাই যাতে এটিতে একটি বিশেষ শ্রেণি প্রয়োগ করা হয়, কারও কাছে কীভাবে এটি অর্জন করতে হবে তার কোনও পয়েন্টার রয়েছে? কোন সাহায্য খুব প্রশংসা করা হয়, ধন্যবাদ! রক এন রোল.

উত্তর:


15

আমার পদ্ধতির কোনও অতিরিক্ত ফাংশন, কোনও ফিল্টার নেই। :)

<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>

বিকল্প:

<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>

এটি @ টসচোকে হত্যা করেছে! কোনও বিভাগের পৃষ্ঠায় ইম ব্যবহার করার কারণে এটি সবচেয়ে ভাল কাজ করেছে এবং একটি এফএন সর্বত্র পোস্টগুলি স্টাইলিং করছে। ধন্যবাদ মানুষ, +1। আমার মনে হয় না যে সরকারীভাবে এখনও আমার কাছে +1 করা আছে।
জোড়ান এম

1
এটি কি আসলে গ্লোবাল মানকে (প্রাক-ইনক্রিমেন্ট অপারেটরের কারণে) প্রভাবিত করে না এবং সম্ভাব্যভাবে এমন আরও কিছু স্ক্রু স্ক্রু করে যা বর্তমান_পোস্ট গণনা সংস্থার উপর নির্ভর করে? আমি বলতে চাইছি, সম্ভাবনা স্লিম, ডান, তবে কেবল এটি করা কি নিরাপদ হবে না (0 === ($ গ্লোবালস ['ডাব্লুপিডিবি'] -> বর্তমান_পোস্ট + 1)% 3? 'তৃতীয়': '')?
টম অাগার

1
@ টমএউগার কিছু স্পষ্ট কারণ হিসাবে এটির কোনও পার্শ্ব প্রতিক্রিয়া আছে বলে মনে হয় না। কিন্তু কমনীয়তার দৃষ্টিকোণ থেকে - আপনি ঠিক বলেছেন। আমি আরও একটি ভাল উদাহরণ যুক্ত করেছি। :)
ফুসিয়া

4
Notice: Undefined property: wpdb::$current_post in
নট

9

যোগ করার জন্য @ হেলগাটিভিকিংস উত্তরগুলি

গ্লোবাল নেমস্পেসকে দূষিত না করে পোস্ট_ক্লাস () এফএন ব্যবহার করুন

  1. staticশ্রেণীর অভ্যন্তরে ভেরিয়েবলগুলি ব্যবহার করা বৈশ্বিক ভেরিয়েবলগুলির সাথে একই আচরণের অনুমতি দেয়: আপনি সেগুলি পরিবর্তন না করলে এগুলি স্থানে থাকে এবং পরিবর্তিত হয় না।
  2. আরও ভাল (@ মাইলো মন্তব্যে প্রস্তাবিত হিসাবে), ডিবি ক্লাস থেকে বর্তমান পোস্টটি নিন।
উদাহরণ:
function wpse44845_add_special_post_class( $classes )
{
    // Thanks to @Milo and @TomAuger for the heads-up in the comments
    0 === $GLOBALS['wpdb']->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
}
add_filter( 'post_class','wpse44845_add_special_post_class' );

হালনাগাদ

আমরা current_postবিশ্বব্যাপী $wp_queryবস্তুর সম্পত্তি ব্যবহার করতে পারি could রেফারেন্স ( পিএইচপি 5.3+ ) দ্বারা বিশ্বব্যাপী পাস করার জন্য কীওয়ার্ড সহ একটি বেনাম ফাংশন ব্যবহার useকরুন :$wp_query

add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
    0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
} );

আরও, আমরা এটি শর্তাধীন চেক সহ প্রধান লুপের মধ্যে সীমাবদ্ধ করতে পারি in_the_loop()


1
আমি এটা পছন্দ করি. স্থির ভেরিয়েবলগুলি বেশ বোঝেন না। আজ আরও একটি জিনিস শিখতে হবে!
হেলগাটিভিকিং

3
কেন শুধু ব্যবহার $wpdb->current_postকরবেন না ?
মিলো

@ মিলো ভাল ক্যাচ +1
কায়সার

আপনাকে অনেক ধন্যবাদ আপনাকে ধন্যবাদ, সত্যই সাহায্যের প্রশংসা করুন! এখনই এটি যোগ করুন!
জোড়ান এম

আহ এই ফাংশনটি খারাপ @ কাইজার এবং সুন্দরভাবে সহজ! আমার কেবল কোনও বিভাগের পৃষ্ঠার জন্য কিছু দরকার আছে তা দেখা যাচ্ছে। এটি আমার পরবর্তী জীবনে আমাকে রক্ষা করবে আমার বন্ধু, আমাকে নতুন কিছু শেখার জন্য ধন্যবাদ। +11!
জোড়ান এম

3

যদি আপনার থিম পোস্ট ক্লাস তৈরি করতে পোস্ট_ক্লাস () ব্যবহার করে তবে আপনি চেষ্টা করতে পারেন। আমি এটি 100% নিশ্চিত নই যে এটি কীভাবে প্যাজিনেশন পরিচালনা করবে বি / সিআই তা পরীক্ষা করার জন্য আমার স্থানীয় ইনস্টল-এ পর্যাপ্ত পোস্ট নেই

add_filter('post_class','wpa_44845');

global $current_count;

$current_count = 1;

 function wpa_44845( $classes ){

    global $current_count;

    if ($current_count %3 == 0 ) $classes[] = 'special-class';

    $current_count++;

    return $classes;

 }

100% নিশ্চিত নয়, তবে আমি অনুমান করি যে আপনি নামের জায়গাটি পরিষ্কার রাখতে staticএকটি পরিবর্তে একটি var ব্যবহার করতে পারেন global। যাইহোক: +1
কায়সার

আপনার অর্থ গ্লোবাল $ কারেন্ট_কাউন্ট উভয়কে স্ট্যাটিক $ কারেন্ট_কাউন্টে পরিবর্তন করতে চান? যখন আমি এটি পরীক্ষা করি তখন কিছুই করার মনে হয় না। যথেষ্ট পরিমাণে ডাব্লু / ভেরিয়েবল স্কোপ পরিচিত নয়, যদিও আমি সম্মত হই তবে আপনি যদি পারেন তবে নেমস্পেসকে দূষিত না করাই ভাল।
হেলগাটিভেকিং


3
আপনি $wpdb->current_postঅন্য ভেরিয়েবল তৈরি না করেও ব্যবহার করতে পারেন।
মিলো

2
$i = 0;
if ( have_posts ) :
while( have_posts ) :
    the_post();

    $class = 'class="BASIC-CLASS';
    if ( 0 === ( $i % 3 ) )
        $class .= 'YOUR-SPECIAL-CLASS';
    $class .= '"';

    echo "<div {$class}>";
        // do stuff
    echo '</div>';

    $i++;
endwhile;
endif;

1

সিএসএস এবং জাভাস্ক্রিপ্ট দিয়ে এটি করার উপায় রয়েছে।

সিএসএস 3 এর মাধ্যমে আপনি প্রতিটি তৃতীয় পোস্টকে নবম-বাছাইকারী নির্বাচক দিয়ে লক্ষ্যবস্তু করেন।

article.post:nth-child(3n+0)
{
    background-color: #777;
}

বা jQuery এর সাহায্যে আপনি একই কৌশলটি ব্যবহার করে CSS ক্লাস যুক্ত করতে পারেন।

jQuery(function($) {
    $( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.