source

다음/이전 링크를 통해 페이지 형제 보기

manysource 2023. 3. 1. 11:20

다음/이전 링크를 통해 페이지 형제 보기

개발 중인 사이트의 CMS로 WordPress를 사용하고 있습니다.투고를 참조할 때 [다음]/[이전] 링크를 사용하여 투고 사이를 이동할 수 있습니다.같은 것을 페이지에 싣고 싶습니다.

  • 페이지 A
  • 페이지 B
  • 페이지 C

페이지 A는 다음 형제 페이지 B로 링크되어야 합니다.페이지 B는 이전 형제 페이지 A와 다음 형제 페이지 C로 링크되어야 합니다.페이지 C는 이전 형제 페이지 B에 링크해야 합니다.

이러한 링크를 생성하는 데 추천할 만한 플러그인이 있습니까?이 기능을 하는 플러그인이 몇 가지 있다는 것은 알지만, 특히 현재 테마에 자동으로 연결되는 플러그인이 필요합니다.테마를 편집하는 방법은 알고 있습니다만, 테마의 갱신을 이용할 수 있는 경우는 항상 제 사이트에 브릭이 됩니다.

LightWord Word Press 테마를 사용하고 있습니다.

다음 코드를 함수에 팝업합니다.php 파일은 액티브테마 디렉토리에 있습니다.

function siblings($link) {
    global $post;
    $siblings = get_pages('child_of='.$post->post_parent.'&parent='.$post->post_parent);
    foreach ($siblings as $key=>$sibling){
        if ($post->ID == $sibling->ID){
            $ID = $key;
        }
    }
    $closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));

    if ($link == 'before' || $link == 'after') { echo $closest[$link]; } else { return $closest; }
}

함수를 호출하려면:

<?php siblings('before'); ?>

또는

<?php siblings('after'); ?>

그러면 이전 페이지 또는 다음 페이지로 링크가 에코아웃됩니다.

둘 다 필요한 경우 함수를 비워 두면 두 링크가 모두 포함된 어레이가 반환됩니다.

Codex라는 단어에서.

<?php
$pagelist = get_pages('sort_column=menu_order&sort_order=asc');
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}

$current = array_search(get_the_ID(), $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

<div class="navigation">
<?php if (!empty($prevID)) { ?>
<div class="alignleft">
<a href="<?php echo get_permalink($prevID); ?>"
title="<?php echo get_the_title($prevID); ?>">Previous</a>
</div>
<?php }
if (!empty($nextID)) { ?>
<div class="alignright">
<a href="<?php echo get_permalink($nextID); ?>" 
 title="<?php echo get_the_title($nextID); ?>">Next</a>
 </div>
 <?php } ?>
</div><!-- .navigation -->

여기서의 답변으로부터 지금까지의 개략적인 토막(실제로의 링크와 투고 타이틀을 취득하기 위해서)이, 누군가에게 도움이 될 가능성이 있습니다.

$closest = array('before'=>get_permalink($siblings[$ID-1]->ID),'after'=>get_permalink($siblings[$ID+1]->ID));
$name =  array('before'=>get_the_title($siblings[$ID-1]->ID),'after'=>get_the_title($siblings[$ID+1]->ID));

if ($link == 'before' || $link == 'after') { 
echo '<a href="' . $closest[$link] . '">';
echo '<span>' . $name[$link] . '</span></a>';
}
else { return $closest; }

여기 잭라이허트의 답변을 기반으로 한 또 다른 기능이 있습니다.형제 목록의 끝에 있을 때 마지막/첫 번째 형제에게 감겨주는 기능이 추가되어 끝없이 순환할 수 있습니다.메뉴 순서도 사용합니다.

function get_sibling_link($link) {
    global $post;

    $siblings = get_pages('sort_column=menu_order&child_of='.$post->post_parent.'&parent='.$post->post_parent);

    foreach ($siblings as $key => $sibling){
        if ($post->ID == $sibling->ID){
            $current_id = $key;
        }
    }

    $closest = [ 
        'before' => get_permalink( $siblings[$current_id-1]->ID ),
        'after'  => get_permalink( $siblings[$current_id+1]->ID )
    ];

    if($siblings[$current_id-1]->ID == '' ){
        $closest['before'] = get_permalink( $siblings[count($siblings)-1]->ID );
    }

    if($siblings[$current_id+1]->ID == '' ){
        $closest['after'] = get_permalink( $siblings[0]->ID );
    }

    if ($link == 'before' || $link == 'after') { 
        echo $closest[$link]; 
    } else { 
        return $closest; 
    }
}

몇 가지 솔루션을 시도해 본 결과, 다른 플러그인을 설치하지 않도록 최선을 다했지만, 결국 효과가 있는 것은 무료 플러그인뿐이었습니다.다음 페이지가 아니라 다음 페이지입니다.

(여기서 제시한 솔루션에 문제가 있었습니다.아마 Wordpress Admin의 Pages 섹션에서 수동으로 페이지를 주문했기 때문일 것입니다.페이지 오더를 수동으로 선택할 수 있습니다.따라서 계층 내 첫 번째 페이지의 ID는 100이고 두 번째 페이지의 ID는 10일 수 있습니다.페이지 ID는 페이지 순서가 아닙니다.)

 function siblings()
    {
        global $post;
        $args = array(
                        'sort_order'    => 'ASC',
                        'sort_column'   => 'menu_order',
                        'hierarchical'  => 1,
                        'child_of'      => $post->post_parent,
                        'parent'        => $post->post_parent,
                        'exclude_tree'  => '',
                        'offset'        => -1,
                        'post_type'     => 'page',
                        'post_status'   => 'publish'
            );
        $siblings = get_pages($args);

        foreach ($siblings as $key=>$sibling)
        {
            if ($post->ID == $sibling->ID)
            {
                $ID = $key;
            }
        }
        $closest = array(
                            'back'  => array('perm_link' => get_permalink(isset($siblings[$ID -1]->ID) ?  $siblings[$ID -1]->ID : $siblings[$ID]->ID), 'title' => get_the_title(isset($siblings[$ID -1]->ID) ?  $siblings[$ID -1]->ID : $siblings[$ID]->ID)),
                            'next'  => array('perm_link' => get_permalink(isset($siblings[$ID +1]->ID) ?  $siblings[$ID +1]->ID : $siblings[$ID]->ID) , 'title' => get_the_title(isset($siblings[$ID +1]->ID) ?  $siblings[$ID +1]->ID : $siblings[$ID]->ID))
                        );

        return $closest;

    }

다음으로 다음과 같이 사용합니다.

    <?php
$newrenderViews = new renderViews() ;
$back_next      = $newrenderViews->siblings();
$next           = $back_next['next'] ;
$next_title     = $next['title'] ;
$next_link      = $next['perm_link'] ;
$back           = $back_next['back'] ;
$back_title     = $back['title'] ;
$back_link      = $back['perm_link'] ;
?>

<div  class="section" >
    <div class="content_wrapper " style="background-color: #8A8C8F; width: 970px;">
    <p class="navbar-text pull-right">
        <a href="<? echo $next_link; ?>" class="navbar-link" style="color: #ffffff;">Next - <?php echo $next_title ;  ?></a>
    </p>
    <p class="navbar-text pull-left">
        <a href="<? echo $back_link; ?>" class="navbar-link" style="color: #ffffff;margin-left: 340px;">Go back - <?php  echo $back_title ;   ?></a>
    </p>
</div>
</div>

언급URL : https://stackoverflow.com/questions/4533407/browsing-page-siblings-through-next-previous-links