首页 > 解决方案 > WordPress按类别自定义帖子分页

问题描述

我使用“CPT(自定义帖子类型)ajax 分页”wordpress 插件在我的任何页面中显示分页。它完美地工作,显示我在页面上放置分页短代码的所有帖子。我遇到了一些麻烦,我创建了一个页面来在页面中显示分类明智的帖子。'CPT(custom post type) ajax pagination' 插件有一个选项,但它不工作。[cptapagination custom_post_type='yourposttype' cptataxname='taxonamyname' cptacatname='categoryname' post_limit='5']. 我正在尝试自定义代码,但它不起作用。请帮我解决这个问题。请检查以下代码

function cptapagination_callback() {
    global $wpdb, $post;
    $cptaNumber = absint($_POST['number']);
    $cptaLimit  = absint($_POST['limit']);
    $cptaType = sanitize_text_field($_POST['post']);
    $cptaCatName = sanitize_text_field($_POST['cptacatname']);
    $cptataxname = sanitize_text_field($_POST['category']);
    if( $cptaNumber == "1" ){
        $cptaOffsetValue = "0";
        if( $cptataxname ) {
            $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,$cptataxname=>$cptaCatName,'post_status' => 'publish');       
        }else{
            $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,'post_status' => 'publish');  
        }
    }else{
        $cptaOffsetValue = ($cptaNumber-1)*$cptaLimit;
        if( $cptataxname ) {
        $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,$cptataxname=>$cptaCatName,'offset' => $cptaOffsetValue,'post_status' => 'publish');
        }else{
        $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,'offset' => $cptaOffsetValue,'post_status' => 'publish'); 
        }

    }
    $cptaQuery = new WP_Query( $args );
        if( $cptaQuery->have_posts() ){
            while( $cptaQuery->have_posts() ){ $cptaQuery->the_post();
                 echo "<div class='cpta-Section'>
                    <a href=".get_the_permalink()." class='btn-cptapagi'><h1>".get_the_title()."</h1></a>

                </div>";
            } wp_reset_postdata();
        }
        if($cptataxname!=""){
            $cpta_args = array('posts_per_page' => -1,'post_type' => $cptaType,$cptataxname=>$cptaCatName,'post_status' => 'publish');
        }else{
            $cpta_args = array('posts_per_page' => -1,'post_type' => $cptaType,'post_status' => 'publish');
        }
        $cpta_Query = new WP_Query( $cpta_args );
        $cpta_Count = count($cpta_Query->posts);
        $cpta_Paginationlist = ceil($cpta_Count/$cptaLimit);
        $last = ceil( $cpta_Paginationlist );
        if( $cptaNumber>1 ){ $cptaprev = $cptaNumber-1; }
        if( $cptaNumber < $last ){ $cptanext = $cptaNumber+1; }

        $adjacents = "2"; 
        $setPagination = "";
        if( $cpta_Paginationlist > 0 ){

            $setPagination .="<ul class='list-cptapagination'>";
            $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination($cptaprev,$cptaLimit)'>Prev</a></li>";

            if ( $cpta_Paginationlist < 7 + ($adjacents * 2) ){

                for( $cpta=1; $cpta<=$cpta_Paginationlist; $cpta++){

                    if( $cptaNumber ==  $cpta ){ $active="active"; }else{ $active=""; }
                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";

                }

            } else if ( $cpta_Paginationlist > 5 + ($adjacents * 2) ){

                if( $cptaNumber < 1 + ($adjacents * 2) ){

                    for( $cpta=1; $cpta <=4 + ($adjacents * 2); $cpta++){

                        if( $cptaNumber ==  $cpta ){ $active="active"; }else{ $active=""; }
                        $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";
                    }
                    $setPagination .="<li class='pagitext dots'>...</li>";
                    $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination($last,$cptaLimit)'>".$last."</a></li>";

                } elseif( $cpta_Paginationlist - ($adjacents * 2) > $cptaNumber && $cptaNumber > ($adjacents * 2)) { 

                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination(1,$cptaLimit);'>1</a></li>";
                    $setPagination .="<li class='pagitext dots'>...</li>";

                    for( $cpta=$cptaNumber - $adjacents; $cpta<=$cptaNumber + $adjacents; $cpta++){

                        if( $cptaNumber ==  $cpta ){ $active="active"; }else{ $active=""; }
                        $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";

                    }

                    $setPagination .="<li class='pagitext dots'>...</li>";
                    $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination($last,$cptaLimit)'>".$last."</a></li>";

                } else {

                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination(1,$cptaLimit);'>1</a></li>";
                    $setPagination .="<li class='pagitext dots'>...</li>";

                    for ($cpta = $last - (2 + ($adjacents * 2)); $cpta <= $last; $cpta++){

                        if( $cptaNumber ==  $cpta ){ $active="active"; }else{ $active=""; }
                        $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";

                    }

                }

            } else {

                for( $cpta=1; $cpta<=$cpta_Paginationlist; $cpta++){
                    if( $cptaNumber ==  $cpta ){ $active="active"; }else{ $active=""; }
                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";
                }

            }
            $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination($cptanext,$cptaLimit)'>Next</a></li>";
            $setPagination .="</ul>";
        }
        echo $setPagination;
    wp_die();
}

function cptapagination_default($atts) {
    global $wpdb;

    $atts = shortcode_atts( array('custom_post_type' => '','cptataxname'=>'','cptacatname'=>'','post_limit' => ''),$atts,'cptapagination');

    if($atts['custom_post_type'] !="" ){
        $cptaType = sanitize_text_field($atts['custom_post_type']); 
    }else{
        $cptaType ="post";  
    }

    if($atts['cptacatname'] !="" ){
        $cptaCatName = sanitize_text_field($atts['cptacatname']);   
    }else{
        $cptaCatName ="uncategorized";  
    }

    if( $atts['post_limit'] !="" ){
        $cptaLimit= absint($atts['post_limit']);    
    }else{
        $cptaLimit=5;
    }


    if($atts['cptataxname']!=""){
        $cptataxname =  sanitize_text_field($atts['cptataxname']);
        $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,$cptataxname=>$cptaCatName,'post_status' => 'publish');
    }else{
        $args = array('posts_per_page' => $cptaLimit,'post_type' => $cptaType,'post_status' => 'publish');  
    }   


    $cptaQuery = new WP_Query( $args );
    echo "<div id='cptapagination-content'>";
        if( $cptaQuery->have_posts() ){
            while( $cptaQuery->have_posts() ){ $cptaQuery->the_post();
                 echo "<div class='cpta-Section'>
                 <a href=".get_the_permalink()." class='btn-cptapagi'>
                    <h1>".get_the_title()."</h1>
                 </a>
                </div>";
            } wp_reset_postdata();
        }
        if($cptataxname!=""){
            $cpta_args = array('posts_per_page' => -1,'post_type' => $cptaType,$cptataxname=>$cptaCatName,'post_status' => 'publish');
        }else{
            $cpta_args = array('posts_per_page' => -1,'post_type' => $cptaType,'post_status' => 'publish');
        }
        $cpta_Query = new WP_Query( $cpta_args );
        $cpta_Count = count($cpta_Query->posts);
        $cpta_Paginationlist = ceil($cpta_Count/$cptaLimit);
        $last = ceil( $cpta_Paginationlist );

        $adjacents = "2"; 
        $setPagination = "";
        if( $cpta_Paginationlist > 0 ){

            $setPagination .="<ul class='list-cptapagination'>";
            $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination(1,$cptaLimit)'>Prev</a></li>";

            if ( $cpta_Paginationlist < 7 + ($adjacents * 2) ){

                for( $cpta=1; $cpta<=$cpta_Paginationlist; $cpta++){

                    if( $cpta ==  0 || $cpta ==  1 ){ $active="active"; }else{ $active=""; }
                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";

                }

            } else if ( $cpta_Paginationlist > 5 + ($adjacents * 2) ){

                for( $cpta=1; $cpta <= 4 + ($adjacents * 2); $cpta++){
                    if( $cpta ==  0 || $cpta ==  1 ){ $active="active"; }else{ $active=""; }
                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";
                }
                $setPagination .="<li class='pagitext dots'>...</li>";
                $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination($last,$cptaLimit)'>".$last."</a></li>";

            } else {

                for( $cpta=1; $cpta<=$cpta_Paginationlist; $cpta++){
                    if( $cpta ==  0 || $cpta ==  1 ){ $active="active"; }else{ $active=""; }
                    $setPagination .="<li><a href='javascript:void(0);' id='post' class='$active' data-posttype='$cptaType' data-taxname='$cptataxname' data-cattype='$cptaCatName' onclick='cptaajaxPagination($cpta,$cptaLimit);'>$cpta</a></li>";
                }

            }
            $setPagination .="<li class='pagitext'><a href='javascript:void(0);' onclick='javascript:cptaajaxPagination(2,$cptaLimit)'>Next</a></li>";
            $setPagination .="</ul>";
        }
        echo $setPagination;

    echo "</div>";
}
add_shortcode( 'cptapagination', 'cptapagination_default' );

标签: phpwordpresspaginationwordpress-gutenberg

解决方案


推荐阅读