AJAX에서 WordPress 페이지 지정이 작동하지 않음
AJAX와 내 WordPress 페이지 번호를 통해 몇 개의 게시물을 로드하고 있습니다. 페이징을 계산하기 위해 다음 함수를 사용합니다.
get_pagenum_link($paged - 1)
에 이는 다음과 같이 .http://localhost:1234/vendor_new/wp-admin/admin-ajax.php
'있다', '어느 URL', '어느 URL', '어느 URL이다' 입니다.http://localhost:1234/vendor_new/display-vendor-results
이 기능을 AJAX와 함께 사용하여 페이징을 위한 올바른 URL을 얻을 수 있는 방법이 있습니까?
다음 세 가지 옵션을 생각할 수 있습니다.
- 인
get_pagenum_link()
을 할 수 . - 「 」를
$_SERVER['REQUEST_URI']
call 변수 호출 중get_pagenum_link()
- 를
paginate_links()
전체 페이지의 HTML을 반환하고 JS로 처리하여 이전/다음 링크만 가져옵니다.
#1 ★★★★★★get_pagenum_link()
장점: 현재 코드 일부를 변경해야 합니다.기본적으로 호출하는 함수의 이름을 변경하고 추가 인수를 전달하기만 하면 됩니다.
단점: 향후에 기능이 변경되면(그렇지 않지만 가능한 경우), 기능도 조정해야 합니다.
커스텀 기능의 관련 코드만 게시합니다.다른 모든 것은 코어 버전의 그대로 둘 수 있습니다.
function my_get_pagenum_link( $pagenum = 1, $escape = true, $base = null ) {
global $wp_rewrite;
$pagenum = (int) $pagenum;
$request = $base ? remove_query_arg( 'paged', $base ) : remove_query_arg( 'paged' );
이 경우 기본 URL을 지정할 수 있는 인수가 하나 더 있습니다. URL을 하드코드(좋은 아이디어가 아님)하거나 동적으로 생성할 수 있습니다.다음은 AJAX 요청을 처리하는 코드 변경 방법입니다.
my_get_pagenum_link( $paged - 1, true, 'http://localhost:1234/vendor_new/display-vendor-results' );
이 솔루션은 여기까지입니다.
#는 #2를 $_SERVER['REQUEST_URI']
장점: 비교적 구현이 용이하며 미래에 대비할 수 있어야 합니다.
단점: 부작용이 있을 수 있습니다(이론적으로는 있어서는 안 되지만, 모르는 경우가 있습니다).JS 코드를 수정해야 할 수도 있습니다.
한 값 AJAX 요구와 수 AJAX 파라미터를 설정할 수 ).base
은 일종의 건건뭐 that 같은 것이다.window.location.pathname + window.location.search
다른 점은 두 번째 경우 JS는 임의의 페이지에서 동작한다는 것입니다(앞으로 여러 장소에서 같은 AJAX 핸들러를 사용하게 될 경우).
변수를 덮어쓰는 코드를 게시하고 복원하겠습니다.
// Static base - making it dynamic is highly recommended
$base = '/vendor_new/display-vendor-results';
$orig_req_uri = $_SERVER['REQUEST_URI'];
// Overwrite the REQUEST_URI variable
$_SERVER['REQUEST_URI'] = $base;
// Get the pagination link
get_pagenum_link( $paged - 1 );
// Restore the original REQUEST_URI - in case anything else would resort on it
$_SERVER['REQUEST_URI'] = $orig_req_uri;
여기서 발생하는 것은 단순히 REQUEST_URI 변수를 자체 변수보다 덮어쓰는 것입니다.이렇게 하면 add_query_arg 함수를 속여서 /vendor_new/display-vendor-results 페이지에 있고 /wp-admin/admin-ajax.php에 속하지 않습니다.
#3 사용paginate_links()
HTML을 JS로 조작합니다.
찬성: 현재로서는 아무것도 생각나지 않는다.
단점: PHP와 JavaScript 코드를 모두 조정해야 합니다.
모든 페이지 연결 링크를 만들기 위해 인수와 함께 사용합니다(전/다음 및 처음/마지막 4개별 링크 중 최소 4개 이상).그런 다음 모든 HTML을 응답의 인수로 전달합니다(JSON을 사용하는 경우 - HTML을 반환하는 경우 응답의 일부).
PHP 코드:
global $wp_rewrite, $wp_query;
// Again - hard coded, you should make it dynamic though
$base = trailingslashit( 'http://localhost:1234/vendor_new/display-vendor-results' ) . "{$wp_rewrite->pagination_base}/%#%/";
$html = '<div class="mypagination">' . paginate_links( array(
'base' => $base,
'format' => '?paged=%#%',
'current' => max( 1, $paged ),
'total' => $wp_query->max_num_pages,
'mid_size' => 0,
'end_size' => 1,
) ) . '</div>';
JS 코드(AJAX 성공 콜백 안에 있어야 함):
// the html variable is supposed to hold the AJAX response
// either just the pagination or the whole response
jQuery( html ).find('.mypagination > *:not(.page-numbers.next,.page-numbers.prev)').remove();
여기서 일어나는 일은 그 안에 있는 모든 요소들을 찾아내는 것입니다.<div class="mypagination">
prev/next 링크를 제외하고 삭제합니다.
정리하려면:
가장 쉬운 해결책은 #2일 수 있지만 링크 생성 중 어떤 이유로 현재 페이지가 admin-ajax.php임을 누군가가 알아야 하는 경우 문제가 발생할 수 있습니다.실행 중인 코드는 사용자의 코드이며 필터에 부가될 수 있는 함수도 사용자가 필요로 하는 페이지에 있다고 생각해야 하기 때문에 아무도 알아차리지 못할 가능성이 있습니다(그렇지 않으면 무언가를 망칠 수 있습니다).
PS: 제 마음대로라면 항상 paginate_links() 함수를 사용하여 페이지 번호를 프런트 엔드에 표시하려고 했습니다.그런 다음 같은 함수를 사용하여 AJAX 핸들러에서 업데이트된 HTML을 생성합니다.
이것은 실제로 무엇을 어떻게 부르고 있는지에 대한 구체적인 세부사항 없이는 대답하기 어렵습니다.끝없는 웹 사이트에서 구현하고 싶겠죠?
가장 좋은 방법은 AJAX를 통해 페이지 인쇄된 페이지 자체를 가져와 관련 마크업을 잡는 것입니다.투고가 있다고 가정합니다.http://www.yourdomain.com/post-1/
다음 페이지의 페이지를 읽고 싶기 때문에 다음과 같은 것이 필요합니다.
$( "#pagination" ).load( "http://www.yourdomain.com/post-1/page/2 #pagination" );
이것은 쉽게 동작할 수 있습니다.get_next_posts_link()
대신get_pagenum_link()
.
AJAX 콜을 다이내믹하게 하려면 , 다음과 같이 할 수 있습니다.
$( "#pagination" ).load( $("#pagination a").attr('href') + " #pagination" );
현재 페이지에서 다음 페이지의 링크를 가져와 이전 페이지 대신 페이지 번호 마크업을 로드합니다.
it, 음, it, 음, 다, 다, 다 으로도 할 수 .get_pagenum_link()
, ', '는'을 .$("#pagination a").attr('href')
페이지가 다음 페이지를.a
#pagination
언급URL : https://stackoverflow.com/questions/20150653/wordpress-pagination-not-working-with-ajax
'bestsource' 카테고리의 다른 글
Retrofit에서 Dynamic JSON을 처리하는 방법 (0) | 2023.03.05 |
---|---|
Json에서 get-only 속성을 무시하는 방법이 있습니까?JsonIgnore 속성을 사용하지 않음NET? (0) | 2023.03.05 |
Firefox 또는 Chrome 브라우저에서 HTTP POST 요청을 수동으로 보내는 방법 (0) | 2023.03.05 |
워드프레스 플러그인에 $wpdb를 포함하려면 어떻게 해야 합니까? (0) | 2023.03.05 |
Angular js - 모든 $http()가 완료되었음을 감지합니다. (0) | 2023.03.05 |