WP_User_Query এর জন্য পৃষ্ঠা-র লিঙ্কগুলি কীভাবে প্রদর্শন করবেন?


10

আমি মনে করি আমি এটির সাথে প্রায় আছি, তবে আমি তৈরি করছি এমন লেখকদের একটি ডিরেক্টরি দেখানোর জন্য পৃষ্ঠা পৃষ্ঠা লিঙ্কগুলি পেতে পারি না।

আমার কোডটি নীচে রয়েছে, তবে লেখকদের পৃষ্ঠাগুলিতে কাজ করার জন্য কীভাবে লিঙ্কগুলি পেতে হবে তা আমি জানি না। আমাকে কি কেউ সাহায্য করতে পারবেন? আমি এটি ব্যবহারের অনুভূতি পেয়েছি, তবে কীভাবে এটি প্রয়োগ করা যায় তা আমি জানি না:

paginate_links ()

ধন্যবাদ

Osu

    <?php 
/* ****************************************************************** */
                        /* !LIST AUTHORS */
/* ****************************************************************** */ 

// THANKS TO:
// http://www.mattvarone.com/wordpress/list-users-with-wp_user_query/

// pagination
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Needed for pagination
$paged -= 1;
$limit = 2;
$offset = $paged * $limit;

// prepare arguments
$args  = array(
    // search only for Authors role
    'role'      => 'Subscriber',
    // order results by display_name
    'orderby'   => 'display_name',
    // return all fields
    'fields'    => 'all_with_meta',
    'number'    => $limit,
    'offset'    => $offset      
);
// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);
// Get the results
$authors = $wp_user_query->get_results();
// Check for results
if (!empty($authors))
{
    echo '<div class="author-entry">';
    // loop trough each author
    foreach ($authors as $author)
    {
        $author_info = get_userdata($author->ID); ?>

        <span style="float:left;padding:0 5px 0 0;"><?php echo get_avatar( $author->ID, 50 ); /* http://codex.wordpress.org/Function_Reference/get_avatar */ ?></span>
        <span class="fn"><strong>First name</strong> : <?php echo $author_info->first_name; ?></span><br />
        <span class="ln"><strong>Last name</strong> : <?php echo $author_info->last_name; ?></span><br />
        <span class="em"><strong>Email address</strong> : <a href="mailto:<?php echo $author_info->user_email; ?>"><?php echo $author_info->user_email; ?></a></span><br />
        <span class="we"><strong>Website</strong> : <a href="<?php echo $author_info->user_url; ?>"><?php echo $author_info->user_url; ?></a></span><br />

        <span class="de"><strong>Bio</strong> :<br /><?php echo $author_info->description ; ?></span>
        <div class="clear">&nbsp;</div>

    <?php 
    }
    echo '</div>';
} else {
    echo 'No authors found';
}
?>

<?php /* WHAT DO I PUT HERE TO CREATE THE PAGINATION LINKS? */ ?>

আপনি যদি আজাক্সের সন্ধান করেন তবে এখানে যান ওয়ার্ডপ্রেস.স্ট্যাকেক্সেঞ্জার
কুইকশনস / ১১৩৩79 /……

উত্তর:


17

এটি আপনার সত্যিকারের কাছাকাছি হওয়া উচিত। আমি এটি পরীক্ষা করে দেখিনি, তবে এটি কয়েকবার ব্যবহার করা একটি সেটআপের মতো প্রায় একই

/*
 * We start by doing a query to retrieve all users
 * We need a total user count so that we can calculate how many pages there are
 */

$count_args  = array(
    'role'      => 'Subscriber',
    'fields'    => 'all_with_meta',
    'number'    => 999999      
);
$user_count_query = new WP_User_Query($count_args);
$user_count = $user_count_query->get_results();

// count the number of users found in the query
$total_users = $user_count ? count($user_count) : 1;

// grab the current page number and set to 1 if no page number is set
$page = isset($_GET['p']) ? $_GET['p'] : 1;

// how many users to show per page
$users_per_page = 5;

// calculate the total number of pages.
$total_pages = 1;
$offset = $users_per_page * ($page - 1);
$total_pages = ceil($total_users / $users_per_page);


// main user query
$args  = array(
    // search only for Authors role
    'role'      => 'Subscriber',
    // order results by display_name
    'orderby'   => 'display_name',
    // return all fields
    'fields'    => 'all_with_meta',
    'number'    => $users_per_page,
    'offset'    => $offset // skip the number of users that we have per page  
);

// Create the WP_User_Query object
$wp_user_query = new WP_User_Query($args);

// Get the results
$authors = $wp_user_query->get_results();

// check to see if we have users
if (!empty($authors))
{
    echo '<div class="author-entry">';
    // loop trough each author
    foreach ($authors as $author)
    {
        $author_info = get_userdata($author->ID); ?>

        <span style="float:left;padding:0 5px 0 0;"><?php echo get_avatar( $author->ID, 50 ); /* http://codex.wordpress.org/Function_Reference/get_avatar */ ?></span>
        <span class="fn"><strong>First name</strong> : <?php echo $author_info->first_name; ?></span><br />
        <span class="ln"><strong>Last name</strong> : <?php echo $author_info->last_name; ?></span><br />
        <span class="em"><strong>Email address</strong> : <a href="mailto:<?php echo $author_info->user_email; ?>"><?php echo $author_info->user_email; ?></a></span><br />
        <span class="we"><strong>Website</strong> : <a href="<?php echo $author_info->user_url; ?>"><?php echo $author_info->user_url; ?></a></span><br />

        <span class="de"><strong>Bio</strong> :<br /><?php echo $author_info->description ; ?></span>
        <div class="clear">&nbsp;</div>

    <?php 
    }
    echo '</div>';
} else {
    echo 'No authors found';
}

// grab the current query parameters
$query_string = $_SERVER['QUERY_STRING'];

// The $base variable stores the complete URL to our page, including the current page arg

// if in the admin, your base should be the admin URL + your page
$base = admin_url('your-page-path') . '?' . remove_query_arg('p', $query_string) . '%_%';

// if on the front end, your base is the current page
//$base = get_permalink( get_the_ID() ) . '?' . remove_query_arg('p', $query_string) . '%_%';

echo paginate_links( array(
    'base' => $base, // the base URL, including query arg
    'format' => '&p=%#%', // this defines the query parameter that will be used, in this case "p"
    'prev_text' => __('&laquo; Previous'), // text for previous page
    'next_text' => __('Next &raquo;'), // text for next page
    'total' => $total_pages, // the total number of pages we have
    'current' => $page, // the current page
    'end_size' => 1,
    'mid_size' => 5,
));

2
+1 কোডটি বিভক্ত হয়ে ব্যাখ্যা করা হলে উপভোগ হত :)
কায়সার

5
সেখানে কিছু ভাল মন্তব্য যুক্ত হয়েছে এবং একটি বাগ বা দুটি ঠিক করেছে :)
পিপ্পিন

এই @ পিপ্পিনের জন্য ধন্যবাদ, স্টুডিওতে উঠলে আমি এটি ব্যবহার করে দেখব। একটি প্রশ্ন: আমি অ্যাডমিন_আরএল এর 'আপনার পৃষ্ঠা-পথ' অংশে কী রাখি? এটা কি আমার সাইটের মূল?
ওসু

পৃষ্ঠাটি যা আপনার ব্যবহারকারীদের অ্যাডমিনে বা সামনের প্রান্তে প্রদর্শিত হচ্ছে?
পিপ্পিন

1
আকর্ষণীয় পদ্ধতির। আমি লক্ষ্য করেছি আপনি এখানে 2 টি ক্যোয়ারী চালাচ্ছেন: প্রথম ব্যবহারকারী এবং প্রথমটি কেবলমাত্র উপযুক্ত পৃষ্ঠায় ব্যবহারকারীদের পেতে। ফলাফলগুলি পৃষ্ঠাতে বিভক্ত করার জন্য আপনি যদি কেবল 1 টি ক্যোয়ারী ব্যবহার করেন এবং তারপরে অ্যারে_স্লাইস ব্যবহার করেন তবে এটি কী আরও ভাল সম্পাদন করবে না? আপনি একই ডেটাতে 2 টি পৃথক ক্যোয়ারী করছেন বলে মনে হচ্ছে যে আপনি কিছু ফেলে রেখে কিছু সম্পাদন করতে পারেন।
কোডসোব্লাবর

11

আপনার সত্যিই পিপ্পিনের উত্তরটি ব্যবহার করা উচিত নয়। প্রশ্নটি খুব অদক্ষ fficient $user_count_queryউদাহরণস্বরূপ, ব্যবহারকারীর সমস্ত ক্ষেত্র সহ আপনার ডাটাবেস থেকে আপনার স্ক্রিপ্টে 999,999 জন ব্যবহারকারী ফিরে আসতে পারেন। এটি অবশ্যই পিএইচপি-র জন্য স্মৃতি এবং / অথবা সময়সীমাতে আঘাত করবে যদি / যখন আপনার সাইটটি যথেষ্ট বড় হয়।

তবে এটিই কেবল ২০১২ সালে সমাধান হতে পারে।

এটি করার আরও ভাল উপায় এখানে। এই উদাহরণে আমি কেবল পরবর্তী এবং পূর্ববর্তী পৃষ্ঠা পেয়েছি তবে যদি আপনি সংখ্যাযুক্ত পৃষ্ঠাগুলি প্রয়োজন হয়, ভেরিয়েবলগুলি এটি তৈরির জন্য রয়েছে। ওয়ার্ডপ্রেসের একটি পৃষ্ঠাগুলি ফাংশন নেই যা ডাব্লুপি_উজার_কিউয়ের সাথে সামঞ্জস্যপূর্ণ (আমার জ্ঞানের সাথে)।

<?php

// Pagination vars
$current_page = get_query_var('paged') ? (int) get_query_var('paged') : 1;
$users_per_page = 2; // RAISE THIS AFTER TESTING ;)

$args = array(
    'number' => $users_per_page, // How many per page
    'paged' => $current_page // What page to get, starting from 1.
);

$users = new WP_User_Query( $args );

$total_users = $users->get_total(); // How many users we have in total (beyond the current page)
$num_pages = ceil($total_users / $users_per_page); // How many pages of users we will need

?>
    <h3>Page <?php echo $current_page; ?> of <?php echo $num_pages; ?></h3>
    <p>Displaying <?php echo $users_per_page; ?> of <?php echo $total_users; ?> users</p>

    <table>
        <thead>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Email</th>
            </tr>
        </thead>

        <tbody>
            <?php
            if ( $users->get_results() ) foreach( $users->get_results() as $user )  {
                $firstname = $user->first_name;
                $lastname = $user->last_name;
                $email = $user->user_email;
                ?>
                <tr>
                    <td><?php echo esc_html($firstname); ?></td>
                    <td><?php echo esc_html($lastname); ?></td>
                    <td><?php echo esc_html($email); ?></td>
                </tr>
                <?php
            }
            ?>
        </tbody>
    </table>

    <p>
        <?php
        // Previous page
        if ( $current_page > 1 ) {
            echo '<a href="'. add_query_arg(array('paged' => $current_page-1)) .'">Previous Page</a>';
        }

        // Next page
        if ( $current_page < $num_pages ) {
            echo '<a href="'. add_query_arg(array('paged' => $current_page+1)) .'">Next Page</a>';
        }
        ?>
    </p>

পৃষ্ঠা 2 দেখানোর উদাহরণ:

ব্যবহারকারীদের সারণী, পৃষ্ঠা 2 থেকে শুরু করে


6/8/2018 আপডেট করুন: কীভাবে পরবর্তী / পূর্ববর্তীটির পরিবর্তে পৃষ্ঠা নম্বর যুক্ত করবেন

আপনি যদি পরবর্তী / পূর্ববর্তী পৃষ্ঠাগুলির পরিবর্তে পৃষ্ঠা নম্বর পেতে চান তবে আপনি কীভাবে এটি সেট আপ করতে পারেন তা এখানে। নোট করুন যে আপনি পৃষ্ঠা লিঙ্কগুলির সাথে সংখ্যাগুলি প্রতিস্থাপন করতে হবে, তারা উদাহরণটিতে ক্লিকযোগ্য হবে না ( https://stackoverflow.com/a/11274294/470480 এর উপর ভিত্তি করে , মাঝারি সংখ্যার ধারাবাহিক পরিমাণ দেখানোর জন্য সংশোধন করা হয়েছে এবং সংযোজন নয় "..." যদি না কোনও পৃষ্ঠা আসলে বাদ যায়)

আপনি আমার সংক্ষিপ্ত ফাইলটিও দেখতে পারেন যা এই উদ্দেশ্যে একটি পুনরায় ব্যবহারযোগ্য ফাংশন রয়েছে।

$current_page = 5; // Example
$num_pages = 10; // Example

$edge_number_count = 2; // Change this, optional

$start_number = $current_page - $edge_number_count;
$end_number = $current_page + $edge_number_count;

// Minus one so that we don't split the start number unnecessarily, eg: "1 ... 2 3" should start as "1 2 3"
if ( ($start_number - 1) < 1 ) {
    $start_number = 1;
    $end_number = min($num_pages, $start_number + ($edge_number_count*2));
}

// Add one so that we don't split the end number unnecessarily, eg: "8 9 ... 10" should stay as "8 9 10"
if ( ($end_number + 1) > $num_pages ) {
    $end_number = $num_pages;
    $start_number = max(1, $num_pages - ($edge_number_count*2));
}

if ($start_number > 1) echo " 1 ... ";

for($i=$start_number; $i<=$end_number; $i++) {
    if ( $i === $current_page ) echo " [{$i}] ";
    else echo " {$i} ";
}

if ($end_number < $num_pages) echo " ... {$num_pages} ";

আউটপুট (পৃষ্ঠা 1 থেকে 10 পর্যন্ত):

[1]  2  3  4  5  ... 10 
1  [2]  3  4  5  ... 10 
1  2  [3]  4  5  ... 10 
1  2  3  [4]  5  ... 10 

1 ...  3  4  [5]  6  7  ... 10 
1 ...  4  5  [6]  7  8  ... 10 

1 ...  6  [7]  8  9  10
1 ...  6  7  [8]  9  10
1 ...  6  7  8  [9]  10
1 ...  6  7  8  9  [10]

আমি রাজী. পিপ্পিনের উত্তরের ডিবিতে 2 টি হিট দরকার যা সম্ভব হলে এড়ানো উচিত।
সুমো

1
হাই @ র‌্যাডলি-টাস্তেয়ার, এটি দুর্দান্ত সমাধান, তবে আমি ভাবছিলাম যে প্রতি পৃষ্ঠায় ব্যবহারকারীদের প্রকৃত পরিসরে "6 ব্যবহারকারীর 2 প্রদর্শন" অংশটি পরিবর্তন করার কোনও উপায় আছে কিনা? সুতরাং পৃষ্ঠা 1 এর জন্য "6 থেকে 1-2" প্রদর্শন করা, 2 পৃষ্ঠার জন্য "6 থেকে 3-4" এবং পৃষ্ঠা 3 এর জন্য "6-6 এর" "এই মুহূর্তে এটি কেবল" 6 এর 2 "দেখায় সমস্ত পৃষ্ঠা.
Damienoneill2001

1
@ Damienoneill2001 এটি একটি ভাল ধারণা, আপনি এর মতো কিছু দিয়ে শুরু করতে পারেন: $start_user_num = (($current_page-1) * $users_per_page) + 1;এবং $end_user_num = $start_user_num + count($users->get_results());
র‌্যাডলি সুস্টায়ার

@ র্যাডলিস্টাস্টারে দুর্দান্ত, এর জন্য ধন্যবাদ। প্রথমে, আমি নিম্নলিখিত ত্রুটির পেয়েছেন: Call to a member function get_results() on a non-objectতাই আমি সংশোধিত $end_user_numberকরার $start_user_num + ($users_per_page-1);এবং যে সমস্যার সমাধান। আবার ধন্যবাদ!
Damienoneill2001

আমি শীঘ্রই এর সাথে কথা বলেছি। যখন আমি চূড়ান্ত পৃষ্ঠায় পৌঁছে যাই যেখানে ব্যবহারকারীর সম্পূর্ণ তালিকা থাকে না, এটি অবশ্যই $end_user_numberআমার সমাধানটির জন্য ভুল চিত্রটি দেখায় । ড্রইং বোর্ডে ফিরে, হা!
Damienoneill2001

1

পূর্ণ ক্রেডিট তার উত্তরের জন্য @ র‌্যাডলি-টেকসইনেয়ারে যেতে হবে, তবে আমি এটির সাথে একটি সামান্য ভুল দেখিয়েছি তাই আমি উত্তরটির আমার সংস্করণটি এখানে শেয়ার করছি।

আমার সংস্করণে আমি লোকেশন, কীওয়ার্ড ইত্যাদি অনুসারে ফলাফলও ফিল্টার করছিলাম যাতে কিছু পৃষ্ঠাগুলিতে '$ ব্যবহারকারী_পার_পেজ' ভেরির চেয়ে কম ফল পাওয়া যায়। সুতরাং উদাহরণস্বরূপ, যদি প্রতি পৃষ্ঠায় আমার ব্যবহারকারী 10 দেখানোর জন্য সেট করা থাকে তবে ফিল্টারটির ফলাফল কেবল 3 জন ব্যবহারকারী ফিরে পেয়েছিল, আমি পৃষ্ঠার শীর্ষে '3 ব্যবহারকারীর 10 জন' প্রদর্শন করেছি ' স্পষ্টতই এটির কোনও ধারণা নেই তাই আমি ফলাফলগুলির গণনাটি '$ users_per_page' ভেরিয়েবলের চেয়ে বেশি কিনা তা পরীক্ষা করার জন্য একটি সাধারণ "যদি" বিবৃতি যুক্ত করেছি।

রেডলি, আপনি যদি আপডেটটি দিয়ে আপনার উত্তরটি সম্পাদনা করেন তবে আমি আনন্দের সাথে সঠিক উত্তর হিসাবে ভোট দেব কারণ আমি মনে করি এটি পিপ্পিনের সমাধানের চেয়ে ভাল।

সুতরাং এটি যে কেউ চায় এটির জন্য এটিই চূড়ান্ত কোড।

<?php

// Pagination vars
$current_page = get_query_var('paged') ? (int) get_query_var('paged') : 1;
$users_per_page = 10;

$args = array(
    'number' => $users_per_page, // How many per page
    'paged' => $current_page // What page to get, starting from 1.
);

$users = new WP_User_Query( $args );

$total_users = $users->get_total(); // How many users we have in total (beyond the current page)
$num_pages = ceil($total_users / $users_per_page); // How many pages of users we will need

if ($total_users < $users_per_page) {$users_per_page = $total_users;}

?>
    <h3>Page <?php echo $current_page; ?> of <?php echo $num_pages; ?></h3>
    <p>Displaying <?php echo $users_per_page; ?> of <?php echo $total_users; ?> users</p>

    <table>
        <thead>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Email</th>
            </tr>
        </thead>

        <tbody>
            <?php
            if ( $users->get_results() ) foreach( $users->get_results() as $user )  {
                $firstname = $user->first_name;
                $lastname = $user->last_name;
                $email = $user->user_email;
                ?>
                <tr>
                    <td><?php echo esc_html($firstname); ?></td>
                    <td><?php echo esc_html($lastname); ?></td>
                    <td><?php echo esc_html($email); ?></td>
                </tr>
                <?php
            }
            ?>
        </tbody>
    </table>

    <p>
        <?php
        // Previous page
        if ( $current_page > 1 ) {
            echo '<a href="'. add_query_arg(array('paged' => $current_page-1)) .'">Previous Page</a>';
        }

        // Next page
        if ( $current_page < $num_pages ) {
            echo '<a href="'. add_query_arg(array('paged' => $current_page+1)) .'">Next Page</a>';
        }
        ?>
    </p>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.