안녕하세요.
현재 워드프레스로 작업을 진행하고 있습니다.
html로 nav를 만들었는데, nav 메뉴들 중에서 어떤 하나의 메뉴가 a태그로 되어있고
이 메뉴를 클릭하면 가장 최근에 작성된 post로 이동하도록 하고 싶습니다.
저는 이게 매우 단순한 구조와 기능일거라 생각하고 찾아보았는데 이게 매우 어려운 구조인가봅니다.
영문으로 찾아보아도 죄다 "최근 작성된 글 목록 만들기" 중심으로 설명되어 있고, 정확히 제가 원하는
"a태그 클릭 시 가장 최근에 작성된 글로 이동"과 관련한 깔끔한 내용은 나타나질 않네요. ㅠㅠ
워드프레스와 php의 식견이 높으신 분들의 조언을 구하고자 합니다.
해결했습니다.
코드는 다음과 같으며 타 커뮤니티에서 참조한 코드를 일부 수정하여 적용하였습니다.
functions.php에서 하단의 내용을 작성하여 함수를 만들었습니다.
function get_latest_post_link(){
global $post;
$current_permalink = get_permalink();
$placeholder = $post;
$args = array(
'numberposts' => 1,
'offset' => 0,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish' );
$sorted_posts = get_posts( $args );
$permalink = get_permalink($sorted_posts[0]->ID);
if ($permalink == $current_permalink)
return;
$title = $sorted_posts[0]->post_title;
$post = $placeholder;
return $permalink;
}
그리고 이동하는 버튼에 해당 링크를 입력하였습니다.
<a href="<?php echo get_latest_post_link(); ?>">Go to Latest Post</a>
안녕하세요. 다른 이슈를 처리하느라 뒤늦게 확인했습니다.
다시한번 자세히 말씀드리자면, 워드프레스 -> 글(Post)에 작성한 것이 맞고,
index의 특정 a태그를 클릭 시 워드프레스의 가장 최근에 작성한 글로 이동하도록 하려는 것이 맞습니다.
예를들어 워드프레스 글(post)를 2014, 2015, 2016, 2017, 2018이라는 제목(title)으로 순서대로 만들었고,
index.php에 위치한 a태그(/?latest_post 입력하라고 하셨던 그 링크)를 클릭 하면, 2018이라는 제목의 게시물이 가장 마지막에 작성되었으므로
2018 글로 이동해야 하는데, 무조건 홈으로 이동하게 됩니다.
여전히 작동되지 않습니다 ... 저도 나름대로 다른 커뮤니티에서 찾아보고는 있으나 정말 답변을 찾기가 힘들군요.
wp_redirect는 도메인을 이동하는 함수입니다.
post를 가져오는 것이 아니라 조건에 맞게 정보를 찾아
해당 post가 표시되는 페이지의 주소는 guid에 담겨있습니다.
안내드린 코드를 저희 환경에서 다시 테스트 해보니
정상동작하는 것을 확인하였습니다.
혹시 관리자->워드프레스->글에 입력하고 계신 것이 맞는지
KBoard를 활용하여 게시글을 작성중인지 확인해보시겠어요?
남겨드린 코드 중
wp_redirect(home_url());
코드 부분은 글이 없을 때 홈으로 이동합니다.
워드프레스 자체 기능인 post와 KBoard는
서로 다른 DB 테이블에 저장되기 때문에 정확한 구분이 필요합니다.
고맙습니다.
답변 남겨주시는 분께서 조금 다르게 이해하신 것 같은데, 현재 제가 하고자 하는것은
특정 페이지에서 post를 해당 페이지로 "가져오도록" 하는것이 아니라 a태그를 클릭하여 해당 글로 "이동" 하려고합니다.
페이지에서 계속 post를 가져오려고 하다보니 문제가 발생하는 것 같네요.
functions.php에는 말씀하신 내용을 넣었고 하단과 같이 latest_post를 넣었는데 최신 글로 이동하지 않고 front-page.php로 이동하고 있습니다.
(www.naver.com에는 해당 사이트 url로 작성했습니다)
<a href="http://www.naver.com/?latest_post"></a>
그리고 참고가 되실 지 모르겠으나 현재 이 사이트의 post는 single.php가 적용된 상태입니다.
wp_get_recent_posts 함수는 post_type이 post인
정보만 가지고 오는 함수입니다.
가이드는 아래 링크에서 확인하실 수 있습니다.
https://developer.wordpress.org/reference/functions/wp_get_recent_posts/
아래의 코드를 테마 functions.php에 입력하시면
발행한 글들이 표시됩니다.
add_action('template_redirect', 'template_redirect_220527');
function template_redirect_220527(){
print_r(wp_get_recent_posts(
array(
'post_status' => 'publish'
)
));
exit;
}
추가로 안내해드린 코드는 글의 상태와 관련없이
모든 글을 가져오게 되므로
마지막으로 발행한 글만 1개 가져오시려면 아래 코드를 사용하시면 되겠습니다.
add_action('template_redirect', 'template_redirect_0524');
function template_redirect_0524(){
if(isset($_GET['lastest_post'])){
$post = wp_get_recent_posts(array('numberposts' => 1, 'post_status' => 'publish'));
if($post && isset($post[0])){
wp_redirect($post[0]['guid']);
}
else{
wp_redirect(home_url());
}
exit;
}
}
고맙습니다.
functions.php에 위 내용을 넣고 url에 /?latest_post을 넣어보았는데요,
front-page.php로 넘어가는 것 같아요. 현재 이 사이트는 공사중 페이지 표시를 위해 front-page.php를 공사중 페이지로 첫 페이지를 설정하여 사용중입니다.
가장 최근에 작성한 워드프레스 '글'로 가는건 어려울까요?
마지막 한 줄의 위치가 잘못되어 있었습니다.
아래 코드로 입력해보시겠어요?
add_action('template_redirect', 'template_redirect_0524');
function template_redirect_0524(){
if(isset($_GET['lastest_post'])){
$post = wp_get_recent_posts();
if($post && isset($post[0])){
wp_redirect($post[0]['guid']);
}
else{
wp_redirect(home_url());
}
exit;
}
}
고맙습니다.
안녕하세요.
위 코드를 function.php에 삽입하니 사이트 모든 페이지가 흰색으로 나타나네요. ... 무엇이 문제일까요?
안녕하세요~^^
template_redirect 액션을 사용하면
가능할 듯 합니다.
아래 코드는 template_redirect 액션으로 간단하게 만들어본 예제입니다.
아래 코드를 테마 functions.php에 입력 후
메뉴 url에는 /?latest_post 를 입력해보시겠어요?
add_action('template_redirect', 'template_redirect_0524');
function template_redirect_0524(){
if(isset($_GET['lastest_post'])){
$post = wp_get_recent_posts();
if($post && isset($post[0])){
wp_redirect($post[0]['guid']);
}
else{
wp_redirect(home_url());
}
}
exit;
}
고맙습니다.