반응형
get_adjacent_post()를 커스텀 투고 유형 간에 동작시킵니다.
사용.get_adjacent_post
,previous_post_link
,그리고.next_post_link
같은 포스트 타입의 아이템만 인식되는 것 같습니다.커스텀 투고 타입이 2개 있는데, 이전 투고 타입과 다음 투고 타입을 모두 링크할 수 있는 방법이 있습니까?
이 질문은 인터넷 전체에 걸쳐서 명확한 답변이 없는 것으로 보입니다.그래서 오리지널에서 나만의 기능을 만들어 냈습니다.get_adjacent_post
필요한 사람을 위해 맞춤 제작했습니다.
기능
이것을 기능에서 제외해 주세요.php
/*
* Replacement for get_adjacent_post()
*
* This supports only the custom post types you identify and does not
* look at categories anymore. This allows you to go from one custom post type
* to another which was not possible with the default get_adjacent_post().
* Orig: wp-includes/link-template.php
*
* @param string $direction: Can be either 'prev' or 'next'
* @param multi $post_types: Can be a string or an array of strings
*/
function mod_get_adjacent_post($direction = 'prev', $post_types = 'post') {
global $post, $wpdb;
if(empty($post)) return NULL;
if(!$post_types) return NULL;
if(is_array($post_types)){
$txt = '';
for($i = 0; $i <= count($post_types) - 1; $i++){
$txt .= "'".$post_types[$i]."'";
if($i != count($post_types) - 1) $txt .= ', ';
}
$post_types = $txt;
}
$current_post_date = $post->post_date;
$join = '';
$in_same_cat = FALSE;
$excluded_categories = '';
$adjacent = $direction == 'prev' ? 'previous' : 'next';
$op = $direction == 'prev' ? '<' : '>';
$order = $direction == 'prev' ? 'DESC' : 'ASC';
$join = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories );
$where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type IN({$post_types}) AND p.post_status = 'publish'", $current_post_date), $in_same_cat, $excluded_categories );
$sort = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1" );
$query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort";
$query_key = 'adjacent_post_' . md5($query);
$result = wp_cache_get($query_key, 'counts');
if ( false !== $result )
return $result;
$result = $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort");
if ( null === $result )
$result = '';
wp_cache_set($query_key, $result, 'counts');
return $result;
}
사용.
기본 사용
// Custom post types can be array() or string
$post1 = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$post2 = mod_get_adjacent_post('next', 'custom2');
사전/다음 링크 작성용
<?php
$prev = mod_get_adjacent_post('prev', array('post', 'custom1', 'custom2'));
$next = mod_get_adjacent_post('next', array('post', 'custom1', 'custom2'));
?>
<?php if($prev) : ?>
<a href="<?php echo get_permalink($prev->ID)?>">« Go back in time</a>
<?php endif; ?>
<?php if($next) : ?>
<a href="<?php echo get_permalink($next->ID)?>">Next: <?php echo $next->post_title; ?> »</a>
<?php endif; ?>
변수를 포함하려면 코드를 수정할 수 있습니다.$in_same_cat
그리고.$excluded_categories
하지만 만약 그렇게 하신다면get_adjacent_post
그래서 하는 거니까.
이전 답변은 더 이상 작동하지 않습니다.이것 좀 봐
좀 더 간단한 새로운 걸 생각해냈죠
- 이것을 당신의 함수에 붙여 넣으세요.php
function custom_posttype_get_adjacent_ID($direction = 'next', $type = 'post', $current) {
// Get all posts with this custom post type
$posts = get_posts('posts_per_page=-1&order=DESC&post_type='.$type);
$postsLength = sizeof($posts)-1;
$currentIndex = 0;
$index = 0;
$result = 0;
// Iterate all posts in order to find the current one
foreach($posts as $p){
if($p->ID == $current) $currentIndex = $index;
$index++;
}
if($direction == 'prev') {
// If it's 'prev' return the previous one unless it's the first one, in this case return the last.
$result = !$currentIndex ? $posts[$postsLength]->ID : $posts[$currentIndex - 1]->ID;
} else {
// If it's 'next' return the next one unless it's the last one, in this case return the first.
$result = $currentIndex == $postsLength ? $posts[0]->ID : $posts[$currentIndex + 1]->ID;
}
return $result;
}
next-prev post ID가 필요한 경우 다음과 같은 기능을 사용하십시오.
custom_posttype_get_adjacent_ID('prev', 'project', get_the_ID());
코멘트:
- 자유롭게 교환해 주세요.
get_the_ID()
원하는 경우 현재 게시물 ID를 입력합니다. - 첫 번째 파라미터는 'next' 또는 'prev'가 될 것으로 예상되면 다시 'next'로 돌아갑니다.
- 두 번째 매개 변수는 사용자 지정 게시 유형 이름이어야 합니다.다음 페이지에서 찾을 수 있습니다.
register_post_type()
기능.그것은 'post'로 되돌아간다. - 마지막 매개 변수가 비어 있으면 작동하지 않습니다.
예:
다음 또는 이전 투고 퍼머링크를 사용하는 경우 다음과 같이 사용할 수 있습니다.
<?php echo get_permalink(custom_posttype_get_adjacent_ID('prev', 'project', get_the_ID())); ?>
태그를 사용하면 다음과 같이 됩니다.
<a href="<?php echo get_permalink(custom_posttype_get_adjacent_ID('prev', 'project', get_the_ID())); ?>">Previous Project</a>
많은 테스트를 할 수 없었기 때문에, 만약 문제가 있는 경우는 가르쳐 주세요.수리를 시도하거나 개선하도록 하겠습니다.
언급URL : https://stackoverflow.com/questions/10376891/make-get-adjacent-post-work-across-custom-post-types
반응형
'programing' 카테고리의 다른 글
React Material UI - 여러 고차 (0) | 2023.04.06 |
---|---|
각도 Js 통화, 기호 유로 이후 (0) | 2023.04.06 |
에일리어스별 그룹화(Oracle) (0) | 2023.04.01 |
VSCode에서 환경 변수를 launch.json에 추가하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
텍스트 에디터에서 JavaScript 개체를 유효한 JSON으로 빠르게 변환할 수 있는 방법이 있습니까? (0) | 2023.04.01 |