কাস্টম এসকিউএল কোয়েরি সহ পৃষ্ঠাগুলি


9

নির্দিষ্ট WHOLE শর্ত সহ কাস্টম পোস্ট প্রকারের পোস্টগুলি নির্বাচন করতে আমার নিজের এসকিউএল স্ট্রিং রয়েছে। আমি প্রদর্শিত পৃষ্ঠার উপর নির্ভর করে উপযুক্ত পোস্টগুলি ফেরত দিতে অফসেট এবং সীমা ব্যবহার করেছি। এটা ঠিক কাজ করছে।

এখন, আমি কাজ করতে previous_posts_link()এবং next_posts_link()ফাংশন করতে চাই । তারা উভয় get_posts_nav_linkযা ব্যবহার থেকে বলা হয় global $wp_query

আমি কি global $wp_queryআমার এসকিউএল স্ট্রিং বা $wpdb->get_resultsফলাফলগুলি বা অন্য কোনও কিছুর সাথে আবার নিয়োগ করতে পারি? সুতরাং নেটিভ previous_posts_link()এবং next_posts_link()ডাব্লুপি ফাংশন কাজ করবে।

যদি তা না হয় তবে আমি কীভাবে পূর্ব এবং পরবর্তী পোস্টের লিঙ্ক ফাংশনগুলি পুনরায় উত্পাদন করতে পারি?

আমি সত্যিই কোন সহায়তা এবং পরামর্শ প্রশংসা করবে! আমি পুরোপুরি এই সাথে আটকে আছি।
ধন্যবাদ :)

দ্রষ্টব্য: আমি সবেমাত্র লক্ষ্য করেছি যে previous_posts_link()সমস্ত পৃষ্ঠায় সঠিকভাবে কাজ করছে, no idea whyএবং এবং এই ক্ষেত্রে, কেন next_posts_linkকাজ করে না: এস

কোডটি এখানে:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_per_page = intval(get_query_var('posts_per_page'));
$offset = ($paged - 1)*$post_per_page;

$sql = "
SELECT SQL_CALC_FOUND_ROWS  wp_posts.*, wp_postmeta.* 
FROM wp_posts 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) 
WHERE 1=1  
    AND wp_posts.post_type = 'movie' 
    AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') 
    AND ((wp_postmeta.meta_key = '_expiry_date' AND CAST(wp_postmeta.meta_value AS DATE) >= '".$current_date."') 
        OR (mt1.meta_key = '_expiry_date' AND CAST(mt1.meta_value AS CHAR) = ''))
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC
LIMIT ".$offset.", ".$post_per_page;

$movies_all_current = $wpdb->get_results( $sql, OBJECT);

if($movies_all_current) {
global $post;

//loop
foreach( $movies_all_current as $key=>$post ) {
    setup_postdata($post);
    //display each post
    //...
} //end foreach ?>

    //navigation
<div class="navigation">
    <div class="previous panel"><?php previous_posts_link('&laquo; newer') ?></div>
    <div class="next panel"><?php next_posts_link('older &raquo;') ?></div>
</div>
}

উত্তর:


16

ঠিক আছে, আমি সেখানে পৌঁছেছি। WP_Queryআমার নিজের খুব বড় এবং জটিল এসকিউএল থাকা দরকার বলে আমি ক্লাসটি ব্যবহার করতে পারিনি । এখানে আমি যা শেষ করেছি তা এখানে:

ইন functions.phpআমি মান ডাব্লু পত্রাঙ্কন যুক্তিবিজ্ঞান জন্য প্রয়োজনীয় গণনা জন্য আমার কাস্টম এসকিউএল এবং যুক্তিবিজ্ঞান আছে:

function vacancies_current( ){
    global $wpdb, $paged, $max_num_pages, $current_date;

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $post_per_page = intval(get_query_var('posts_per_page'));
    $offset = ($paged - 1)*$post_per_page;

    /* Custom sql here. I left out the important bits and deleted the body 
     as it will be specific when you have your own. */
    $sql = "
        SELECT SQL_CALC_FOUND_ROWS  {$wpdb->posts}.*
        FROM {$wpdb->posts}
        ....
        GROUP BY {$wpdb->posts}.ID 
        ORDER BY {$wpdb->posts}.post_date DESC
        LIMIT ".$offset.", ".$post_per_page."; ";   

    $sql_result = $wpdb->get_results( $sql, OBJECT);

    /* Determine the total of results found to calculate the max_num_pages
     for next_posts_link navigation */
    $sql_posts_total = $wpdb->get_var( "SELECT FOUND_ROWS();" );
    $max_num_pages = ceil($sql_posts_total / $post_per_page);

    return $sql_result;
}

তারপরে আমার টেম্পলেট ফাইলটিতে আমার থাকতে হবে:

<?php 
    $vacancies_current = vacancies_current();
    /*followed by a standart loop to display your results */ 
 ?>
<div class="navigation">
    <div class="previous panel"><?php previous_posts_link('&laquo; previous vacancies',$max_num_pages) ?></div>
    <div class="next panel"><?php next_posts_link('more vacancies &raquo;',$max_num_pages) ?></div>
</div>

কৌতুক সরবরাহ ছিল previous_posts_link()এবং এটি সঠিকভাবে গণক মধ্যে মান এবং স্পষ্টত।next_posts_link$max_num_pages

এটি খুব ভাল কাজ করে। আশা করি এটি কাউকে সাহায্য করবে :)

Dasha


+1 দুর্দান্ত কাজ। স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ১60০৫70০৯ / / আমার উত্তর নিয়ে গবেষণা করার সময় আমি এগুলি জুড়ে এসেছি (এবং প্রচুর bণ নিয়েছি, ধন্যবাদ) । আমি ভাবছিলাম আপনি একটি উপায় এই মত একটি কাস্টম SQL বক্তব্য ব্যবহার করতে জানি, কিন্তু একটি pre_get_posts মধ্যে () অনুযায়ী কর্ম codex.wordpress.org/... ? আমি এই সমাধানটি ওয়ার্ডপ্রেস.আর.এস / সাপোর্ট / টপিক/ … অনুযায়ী, শেষ পৃষ্ঠা ইস্যুতে 404 এর কাছে সংবেদনশীল find আপনি কীভাবে এটিকে কাটিয়ে উঠলেন?
সেপ্টেম্বর

1

কাস্টম ক্যোয়ারীগুলি একবার দেখুন - যা আপনাকে অনেক আকর্ষণীয় এবং দরকারী উপায়ে wp_query কলটি সংশোধন করার অনুমতি দেয় এবং ফলাফলগুলিকে আপনার গ্লোবাল ক্যোয়ারী অবজেক্টে ফিরিয়ে দেয়।


1

আনুর উত্তরটি প্রসারিত হচ্ছে। আপনার কাস্টম এসকিএল কোয়েরিতে নির্ভর করার পরিবর্তে আপনি WP_Query শ্রেণিটি ব্যবহার করতে পারেন এবং ওয়ার্ডপ্রেসকে সমস্ত ভারী এসকিউএল উত্তোলন পরিচালনা করতে পারেন । এটি অবশ্যই আপনার নেভিগেশন সমস্যার সমাধান করবে।

আপনার _ এক্সপিরিয়_ডেট মেটা_কির মধ্যে মুভি পোস্টের ধরণের জন্য ক্যোয়ারী উদাহরণ:

$today = getdate();
$args = array(
    'post_type' => 'movie',
    'meta_query' => array(
            'meta_key' => '_expiry_date',
            'meta_value' => $today,
            'meta_compare' => '< '
                    ),
    'posts_per_page' => -1,
     'order'    => 'DESC'
    );

    $movie_query = new WP_Query( $args );

    while ( $movie_query->have_posts() ) : $movie_query->the_post(); 
    // Do stuff
   endwhile; ?>

 <div class="navigation">
<div class="previous panel"><?php previous_posts_link('&laquo; newer') ?></div>
<div class="next panel"><?php next_posts_link('older &raquo;') ?></div>
</div>

উত্তরের জন্য আপনাকে ধন্যবাদ, যাইহোক, আমি WP_Queryআমার নিজস্ব কাস্টম এসকিউএল তৈরি করার প্রয়োজন হিসাবে আমি ক্লাসের উপর নির্ভর করতে পারি না । আমি সেখানে
পৌঁছেছি,

-2
<?php

global $wpdb, $paged;
query_posts($query_string . '&posts_per_page=9');
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$author = isset($_GET['author_name']) ? get_userdatabylogin($author_name) : get_userdata(intval($author));

query_posts($query_string . '&posts_per_page=9');

$args = array(
'post_type' => 'post',
'meta_query' => array(
        'meta_key' => 'autor',
    'post_status' => 'publish',
        'meta_value' => $author->id,
            ),
'paged' => $paged,
'posts_per_page' => 9,
'order'    => 'DESC'
);

$postsQuery = new WP_Query( $args );

?> 

টেমপ্লেট:

<h1lánky od <?php echo $author->display_name; ?></h1>
        <ul class="thumbnails">

            <?php while ( $postsQuery->have_posts() ) : $postsQuery->the_post();  ?>
                <li class="span3">
                <div class="thumbnail">
                    <a href="<?php the_permalink(); ?>">
                    <?php the_post_thumbnail(array(260, 259)); ?>
                    </a>
                    <?php
                    $class = '';
                    if (in_category('fashion')) {
                    $class = "link-fashion";
                    } else if (in_category('beauty')) {
                    $class = "link-beauty";
                    } else if (in_category('gourmet')) {
                    $class = "link-gourmet";
                    } else if (in_category('lifestyle')) {
                    $class = "link-lifestyle";
                    } else if (in_category('about-us')) {
                    $class = "link-about";
                    }
                    ?>
                    <a href="<?php the_permalink(); ?>">
                    <h2 class="<?=  $class ?>">
                        <span></span>
                        <?php
                        // short_title('...', 25); 
                        echo get_the_title();
                        ?>
                    </h2>
                    </a>
                    <?php the_excerpt(); ?>
                    <hr>
                </div>
                </li>
            <?php endwhile; ?>

        </ul>
        <?php wp_pagenavi(); ?>

2
দয়া করে আপনার কোডটিতে একটি ব্যাখ্যা যুক্ত করুন, আপনি কেন দুটি প্রশ্ন চালাচ্ছেন, একটি সঙ্গে query_postsএবং একটিWP_Query
পিটার গুসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.