একক-কাস্টম.এফপি-তে WP_Query পৃষ্ঠা ination


16

আমি যা করতে চাই:

WP_Queryএকটি একক-কাস্টম-পোস্ট-টাইপ.এফপি টেম্পলেট ফাইলে প্যাগ্রেশন সেটআপ করুন

আমি কী করেছি

1) "লেখক" নামে একটি পোস্ট প্রকার তৈরি করেছেন। সেই পোস্টের ধরণের প্রতিটি পোস্ট পৃথক লেখক।

2) স্ট্যান্ডার্ড সম্পাদনা পোস্টের পর্দার পৃষ্ঠাগুলিতে একটি ড্রপডাউন থাকে যা লেখকদের কাস্টম পোস্ট ধরণের সমস্ত পোস্ট (লেখক) তালিকাভুক্ত করে।

3) একটি একক-লেখক.এফপি টেম্পলেট তৈরি করেছে যা ড্রপডাউন থেকে লেখক মেটাডেটার সাথে সমস্ত পোস্টের ক্যোয়ারী রয়েছে, সুতরাং ফলস্বরূপ পোস্টগুলির একটি তালিকা যা তাদের জন্য একই লেখককে অর্পণ করা হয়েছে (সংরক্ষণাগারের মতো):

<?php

// set the "paged" parameter (use 'page' if the query is on a static front page)
global $paged;

/*We need this here to add and maintain Pagination if Template is assigned to Front Page*/
if ( get_query_var( 'paged' ) ) {
    $paged = get_query_var('paged');
} elseif ( get_query_var( 'page' ) ) {
    $paged = get_query_var( 'page' );
} else {
    $paged = 1;
}

$args = array(
    'posts_per_page'    =>  10,
    'meta_key'          => 'author_select',
    'meta_value'        => $author_id,
    'paged'             => $paged,
);

$temp = $wp_query;
$wp_query = NULL;

$wp_query = new WP_Query($args);

?>

<?php if( $wp_query->have_posts() ) : ?>    
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <?php // Successfully outputs the results of the above query, so I've omitted the code from this example. ?>

    <?php endwhile; ?>

<div class="single_navigation"> 
    <?php if( get_adjacent_post( false, '', true ) ) { ?>
        <span class="prev"><?php previous_post_link( '&lt; %link' ) ?></span>
    <?php } ?>

    <?php if( get_adjacent_post( false, '', false ) ) { ?>
        <span class="next"><?php next_post_link( '%link &gt;' ) ?></span>
    <?php } ?>
    </div><!--/single navigation-->
<?php endif; ?>

<?php
    $wp_query = null;
    $wp_query = $temp;
    wp_reset_query();
?>

আমি কি আটকে আছি

পৃষ্ঠাগুলি লিঙ্ক উপস্থিত হয় না। আমি কিছু গবেষণা করেছি এবং দেখেছি তারা $wp_queryভেরিয়েবলটি ব্যবহার করে , যাইহোক আমি যখন আমার ক্যোয়ারী ভেরিয়েবলটিতে পরিবর্তন করেছি $wp_query, লিঙ্কগুলি উপস্থিত হয়েছিল, তবে ক্লিক করার পরে কিছুই হয়নি।

আমি ভুল করছি যেখানে কোন ধারণা?

সম্পাদনা:

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

এই কার্যকারিতাটির উদ্দেশ্য হ'ল পোস্টগুলিকে কাস্টম লেখক (ব্যবহারকারীদের মধ্যে অন্তর্নির্মিত বাহিরে) থাকতে দেওয়া এবং এই টেমপ্লেটের উদ্দেশ্যটি কোনও প্রদত্ত লেখকের (যা ইতিমধ্যে কাজ করছে) সমস্ত পোস্ট আউটপুট করা।


3
একটি ভাল ফর্ম্যাট প্রশ্নের জন্য একটি উত্সাহ, যদিও আপনি বর্ণনা করছেন না যে আপনি কেন এটি করছেন, এটি কি বর্তমান লেখক বাক্সের কোনও সম্পর্কিত পোস্ট?
টম জে নোয়েল

1
আমি সত্যিই @ টমজেউভেল এর সাথে একমত নই। +1
পিটার গুজন

2
সম্পর্কিত নয়, তবে এটি প্রতিধ্বনিত হওয়ার দরকার নেইthe_title()
পিটার গুসেন

2
হয় 'meta_value' => $author_idউল্লিখিত ড্রপডাউন থেকে ভরা হচ্ছে? এবং ড্রপডাউন মাধ্যমে প্রতিটি লেখক বাছাই করার সময়, প্রথম দশটি পোস্ট কি সঠিকভাবে প্রদর্শিত হচ্ছে?
স্টিফেন এস

1
আপনি কি নিশ্চিত $author_query->have_posts()হয়েছেন যে ফিরে আসে trueএবং $author_queryআসলে কোনও পোস্ট রয়েছে?
কায়সার

উত্তর:


17

আপনার 2 টি সমস্যা আছে।

প্রথম সমস্যা

লাইন

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

ব্যর্থ হবে, কারণ একক পোস্ট ভিউতে, যখন ইউআরএল থাকে '/page/XX/', ভেরিয়েবল ওয়ার্ডপ্রেস সেটগুলি হয় 'page'এবং না 'paged'

'page'পরিবর্তে আপনি ব্যবহার করার কথা ভাবতে পারেন 'paged', তবে এটি কোনওভাবেই কাজ করবে না, কারণ একবার 'page'ভেরিয়েবলটি একাধিক পৃষ্ঠার একক পোস্টের জন্য ব্যবহার করার উদ্দেশ্যে তৈরি হয় (পৃষ্ঠার পৃথকীকরণ ব্যবহার করে <!--nextpage-->) এবং পোস্টটি একাধিক পৃষ্ঠা না হয়ে গেলে, ওয়ার্ডপ্রেস অনুরোধটি পুনর্নির্দেশ করবে ইউআরএল ছাড়া '/page/XX/'

আপনি যখন নিজের ক্যোয়ারী ভেরিয়েবলের নাম রাখেন তখন এটি ঘটে $wp_query

সমাধানটি হ'ল এটির জন্য দায়ী ফাংশনটি সরিয়ে পুনঃনির্দেশটিকে রোধ 'redirect_canonical'করা 'template_redirect':

সুতরাং, আপনার functions.phpযোগে:

add_action( 'template_redirect', function() {
    if ( is_singular( 'authors' ) ) {
        global $wp_query;
        $page = ( int ) $wp_query->get( 'page' );
        if ( $page > 1 ) {
            // convert 'page' to 'paged'
            $wp_query->set( 'page', 1 );
            $wp_query->set( 'paged', $page );
        }
        // prevent redirect
        remove_action( 'template_redirect', 'redirect_canonical' );
    }
}, 0 ); // on priority 0 to remove 'redirect_canonical' added with priority 10

এখন ওয়ার্ডপ্রেস আর পুনর্নির্দেশ করবে না এবং সঠিকভাবে 'paged'ক্যোয়ারী ভার সেট করবে ।

দ্বিতীয় সমস্যা

next_posts_link()এবং previous_posts_link()উভয় if ( ! is_single() )পৃষ্ঠাগুলি প্রদর্শন পরীক্ষা করে দেখুন।

এখন, is_single()আপনার ক্ষেত্রে এটি সত্য, কারণ আপনি 'লেখক' টাইপের একক পোস্টে রয়েছেন, সুতরাং সেই ফাংশনগুলি আপনার প্রত্যাশার মতো কাজ করতে পারে না।

আপনার 3 টি সম্ভাবনা রয়েছে:

  1. query_postsমূল ক্যোয়ারিকে ওভাররাইড করতে ব্যবহার করুন (সত্যিই প্রস্তাবিত নয় )
  2. কাস্টম পোস্ট ধরণের পরিবর্তে একটি কাস্টম পৃষ্ঠার টেম্পলেট ব্যবহার করুন, কারণ is_single()পৃষ্ঠাগুলির জন্য এটি মিথ্যা এবং আপনার কোড সেখানে কাজ করবে।
  3. আপনার নিজস্ব পৃষ্ঠাগুলি ফাংশন লিখুন এবং এটি ব্যবহার করুন

সমাধান নম্বর # 3 এর জন্য এটি কোড:

function my_pagination_link( $label = NULL, $dir = 'next', WP_Query $query = NULL ) {
    if ( is_null( $query ) ) {
        $query = $GLOBALS['wp_query'];
    }
    $max_page = ( int ) $query->max_num_pages;
    // only one page for the query, do nothing
    if ( $max_page <= 1 ) {
        return;
    }
    $paged = ( int ) $query->get( 'paged' );
    if ( empty( $paged ) ) {
        $paged = 1;
    }
    $target_page = $dir === 'next' ?  $paged + 1 : $paged - 1;
    // if 1st page requiring previous or last page requiring next, do nothing
    if ( $target_page < 1 || $target_page > $max_page ) {
        return;
    }
    if ( null === $label ) {
        $label = __( 'Next Page &raquo;' );
    }

    $label = preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label );
    printf( '<a href="%s">%s</a>', get_pagenum_link( $target_page ), esc_html( $label ) );
}

এবং এটিতে এটির মতো ব্যবহার করুন single-authors.php:

my_pagination_link( 'Older Entries', 'next', $author_query );
my_pagination_link( 'Newer Entries', 'prev', $author_query );

খুব বিস্তারিত উত্তর, আপনাকে ধন্যবাদ! এটি সাইটের ইংরেজী পক্ষে কাজ করছে, তবে ফরাসি পক্ষের পৃষ্ঠাগুলি লিঙ্কগুলি কিছুই করে না, তারা কেবল পৃষ্ঠাটি রিফ্রেশ করে। আমি ডাব্লুপিএমএল ব্যবহার করছি।
শেন

1
@ শানকে তাই মনে হয় যে ডাব্লুপিএমএল এমন কিছু ফিল্টার চালায় যা কোড কাজ করতে বাধা দেয়। তবে এটি একটি দুর্দান্ত প্লাগইন, এবং তাই কংগিটটি কোথায় তা বুঝতে আমি হাজার হাজার কোডের লাইন খনন করতে পারি না। WPML সমর্থন জিজ্ঞাসা করুন।
গাজাজাপ

@ শান ডাব্লুপিএমএল সমর্থন ফোরাম - এবং যদি উপরে (যদি আমি ধরে নিই) এর পক্ষে কাজ করে তবে দয়া করে এটি সমাধান হিসাবে চিহ্নিত করুন। ডাব্লুপিএমএল দ্বন্দ্ব যাইহোক বিষয় / এই সাইটের পরিধি বাইরে।
কায়সার

কল্পনাপ্রসূত উত্তর, মূলত কারণ এটি আমার পৃষ্ঠাগুলি সমস্যা সমাধান করতে আমাকে সহায়তা করেছিল। আমি একই ধরণের কাজ করে চলেছি এবং লুপ ওভার করার জন্য একটি দ্বিতীয় ডাব্লুপি_কিউয়ারি তৈরি করেছি। আমি ডেকেছি the_posts_paginationকিন্তু এই প্রশ্নের উল্লিখিত হিসাবে wp_query এর মূল অনুলিপিটি গ্রহণ করতে হয়েছিল: wordpress.stackexchange.com/questions/216821/…
আলেকজান্ডার হলসগ্রোভ

1
আপনি সঠিক @ হংপং, স্থির, ধন্যবাদ।
গাজাজ্যাপ

0

অনুরূপ আরেকটি ডাব্লুপিএসই প্রশ্নের উপর ভিত্তি করে " প্যাজিনেশন wp_query কাস্টম ক্ষেত্রের মানগুলি কাজ করছে না ", আমি global $paged;আপনার টেম্পলেট ফাইলটির শুরুতে যুক্ত করার পরামর্শ দেব :

global $paged;
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

1
উত্তরের জন্য ধন্যবাদ! দুর্ভাগ্যক্রমে এটি কোনও পার্থক্য বলে মনে হচ্ছে না। পৃষ্ঠাগুলি লিঙ্ক উপস্থিত হয় না
শেন

1
স্টিফেন, কেন এই সাহায্য করা উচিত? হ্যাঁ, এটি বিশ্বব্যাপী প্রেক্ষাপট থেকে এনে দেবে, তবে এখনও পর্যন্ত আপনি এটি দিয়ে কিছু করছেন না। আপনি যদি বিশ্বব্যাপী ওভাররাইড করতে চান তবে ব্যবহার করুন $GLOBALS['paged'] = get_query_var( 'paged' );। অন্যথায় কেবল গ্লোবাল সামগ্রী ব্যবহার করুন।
কায়সার

@ শানে হুম, টেমপ্লেট পৃষ্ঠাটি কি স্ট্যাটিক সম্মুখ পৃষ্ঠা হিসাবে ব্যবহৃত হচ্ছে?
স্টিফেন এস

না, এটি কেবলমাত্র কাস্টম পোস্ট ধরণের জন্য একটি একক পোস্ট টেম্পলেট হিসাবে ব্যবহৃত হচ্ছে। আমি আমার প্রশ্নের সাথে পরিবর্তন করার চেষ্টা হয়নি $author_queryকরতে $wp_queryএবং যে পত্রাঙ্কন প্রদর্শিত করলো, কিন্তু আমি এটা উপর মধ্যে পৃষ্ঠা রিফ্রেশ এ ক্লিক করুন এবং আসলে পরবর্তী পৃষ্ঠায় যেতে না, যদিও সেখানে একাধিক পৃষ্ঠা আছে। আমি এই পরিবর্তনগুলি প্রতিফলিত করতে আমার উত্তর আপডেট করেছি।
শেন

1
Php.net ব্যাখ্যা যে খারাপ নয়। আমি সবেমাত্র সাথে খেলা globalএবং খেলা প্রস্তাব $GLOBALS। কিছুটা var_dump(), কিছু ফাংশন এবং আপনি ভাল আছেন। কিছুটা চেষ্টা / ত্রুটি করে সত্যই বুঝতে এটি আপনার প্রায় শেষ হবে। আধ ঘন্টা প্রয়োজন। এটি আপনাকে ক্লাস বনাম ক্লাসগুলি এবং সামগ্রিকভাবে ওওপি পদ্ধতির আরও ভালভাবে বুঝতে সহায়তা করবে। এবং এটি স্পষ্টতই আপনাকে নেমস্পেসগুলি বোঝার আরও কাছাকাছি নিয়ে আসবে :)
কায়জার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.