it-swarm-ko.tech

학부모 게시물이없는 의견 만 표시하는 페이지에 연결

나는 부모 게시물이없는 자신의 페이지에 게시물 댓글을 표시하고 싶습니다. 단일 포스트 페이지에서 wp_list_comments ()를 사용하고 콜백 함수를 전달하여 내 자신의 주석 표시 마크 업을 사용할 수 있음을 알고 있습니다. 나는 이것을 할 계획이므로, 각 코멘트에 대한 링크를 포함 시켜서 그 코멘트를 자신의 페이지에 표시 할 수 있습니다.

이 WordPress 아니 었으면 사용하십시오.

<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>

... 쿼리 문자열에서 $ comment_id를 가져옵니다.

WordPress에서 그 링크는 어떻게 생겼습니까? 즉 : get_comment ($ comment_id) 및 comment_template ()을 호출하는 my_comments.php에 직접 들어가기 위해 포함 할 문자열은 무엇입니까?

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
5
kevtrout

WordPress에서 새 페이지를 만들고 해당 페이지에 사용자 지정 서식 파일을 제공 할 수 있습니다. 그러면 URL은 그 페이지로 이동하는 것이 정상적으로 될 것입니다. 유일한 차이점은 사용중인 사용자 정의 템플릿이 쿼리 문자열을 통해 comment_id를 수락하도록 설정 한 다음 특정 코멘트에 대한 세부 정보를 얻고 템플릿 코드에서 설명의 세부 정보를 표시한다는 것입니다.

그래서, 당신이 만드는 "Comment Details"라는 WordPress에 페이지가 있다면, 당신은 을 통해 그 페이지에 접근 할 수 있습니다. http://www.domain.com/comment-details (퍼머 링크가 활성화되었다고 가정). 따라서 링크는 다음과 같이 보일 것입니다.

<a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>

"메모 세부 정보"페이지는 세부 정보를 누설하는 코드가 포함 된 사용자 지정 서식 파일을 사용하도록 설정됩니다.

2
Todd Perkins

이 작업을 수행하는 데는 여러 가지 방법이 있습니다. 다른 플러그인보다 더 연마 된 플러그인과 다른 플러그인과의 충돌 가능성이있는 플러그인은 모두 있지만, 여기있는 모든 것을 무시하면 사용자가 요구 한 것과 거의 유사한 한 가지 방법이 있습니다. :)

이 솔루션은 다음과 같은 URL 형식을 지원합니다. %comment_id%wp_comments 테이블의 주석에 대한 숫자 ID입니다.

http://example.com/comments/%comment_id%/

먼저 다음 코드를 사용하여 URL 재 작성을 구성해야합니다. 희망적으로 그것은 합리적으로 자기 설명 적이지만 주저하지 않아도됩니다.

$wp->add_query_var('comment_id');  // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id=');  // Define a rewrite tag to match that assigns to the query var 
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%');   // Define a URL pattern to match the rewrite tag.

또한 규칙을 플러시하기 위해 플러그인 활성화 훅에서이 코드를 호출하거나 사이트의 경우 관리 콘솔 설정> 영구 링크 설정에 영구 링크를 저장할 수 있습니다 지역:

global $wp_rewrite;
$wp_rewrite->flush_rules(false);

다음으로 parse_query 필터 훅을 추가하십시오. 이것은 WordPress가 쿼리를 검사 한 후에 호출됩니다. 추가 된 comment_id query_var 세트가 있는지 확인하고 필요한 경우 원하는 URL에 있는지 테스트합니다. 그렇다면 'p' 매개 변수 (게시물 ID로 설정해야 함)를 주석과 관련된 게시물로 설정하기 위해 get_comment()을 사용하여 주석 배열을로드합니다. 그런 식으로 WordPress가 쿼리를 실행하여 적어도 로드하면 아래의 comment.php 테마 템플릿 파일에 필요한 무언가를로드하므로 쿼리를 실행할 수 없습니다. 나중에 필요할 때 다른 쿼리를 실행했습니다. 이 코드는 WordPress가 이상한 이름의 caller_get_posts 옵션을 사용하여 끈적한 게시물을 무시하도록 지시합니다.

add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
    global $wp;
    if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') { 
        $comment = get_comment($query->query['comment_id']);
        $query->query_vars['p'] =  $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
        $query->query_vars['caller_get_posts'] = true;  // Keeps sticky posts from invading into the top of our query.
    }
}

여전히 다음에는 /wp-includes/template-loader.php 필터를 사용하여 template_include에 코드를 연결해야합니다. 이것은 WordPress가 쿼리를 검사하고 주석에 대한 게시물을로드 한 후에 호출됩니다. 여기에서 query_var에서 comment_id를 다시 확인하고 원하는 URL을 확인합니다. 그렇다면 /index.php 템플릿 페이지를 테마 템플릿 파일 인 /comment.php로 바꾸십시오. 다음을 작성해야합니다.

add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
    global $wp,$wp_query;
    if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
        $template = str_replace('/index.php','/comment.php',$template);
    }
    return $template;
}

마지막으로 /comment.php라고 부르기로 선택한 테마 템플릿 파일을 만들어야합니다. 그것이 당신의 테마이기 때문에 당신이 원하는 것처럼 보이게하고 싶지만 여기에 당신을 시작하게하는 예가 있습니다 :

<?php 
/*
 *  File: /wp-content/themes/my-theme/comment.php
 */ 
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
    <div id="comment-<?php echo $comment_id; ?>" class="comment">
        <p>Comment by: <span class="comment-author">
            <a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
            on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
          at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
        </p>
        <p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
        <blockquote><?php echo $comment->comment_content; ?></blockquote>
    </div>
</div>
<?php 
get_sidebar();
get_footer();

질문 있니? 그냥 물어봐.

추신 위에 설명 된 모든 코드는 테마의 functions.php 파일 및/또는 자신의 플러그인에 포함될 수 있습니다. 경고는 플러그인 관리 활성화 훅에서 URL 재 작성 플러싱 규칙을 작성하는 것입니다. 관리 룰의 permalinks 섹션에 수동 플러시를 포함 시키려한다면 플러그인 활성화 훅을 사용해야합니다. 활성화 후크를 등록하는 방법을 보여주지는 않았지만 더 배우고 싶다면 여기 여기 에서 읽을 수 있습니다.

15
MikeSchinkel