bestsource

AJAX에서 WordPress 페이지 지정이 작동하지 않음

bestsource 2023. 3. 5. 10:12
반응형

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을 얻을 수 있는 방법이 있습니까?

다음 세 가지 옵션을 생각할 수 있습니다.

  1. get_pagenum_link() 을 할 수 .
  2. 「 」를 $_SERVER['REQUEST_URI'] call 변수 호출 중get_pagenum_link()
  3. 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

반응형