ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Canonical points to redirect 오류 해결을 위한 플러그인 개발
    IT/Php 2023. 12. 29. 06:07

    Canonical points to redirect을 해결할 수 있는 플러그인 개발 아이디어에서 출발

    워드프레스에서 "Canonical points to redirect" 오류를 해결하기 위한 플러그인을 개발하는 것은 가능합니다. 이러한 플러그인은 기본적으로 두 가지 주요 기능을 수행해야 합니다: 1) 웹사이트의 모든 페이지에서 캐노니컬 URL을 검사하고, 2) 캐노니컬 URL이 리디렉션을 가리키는 경우 이를 관리자에게 알리거나 자동으로 수정합니다.

    Canonical points to redirect 오류 해결을 위한 플러그인 개발

     

    이러한 플러그인은 기본적으로 두 가지 주요 기능을 수행해야 합니다: 1) 웹사이트의 모든 페이지에서 캐노니컬 URL을 검사하고, 2) 캐노니컬 URL이 리디렉션을 가리키는 경우 이를 관리자에게 알리거나 자동으로 수정합니다.

     

    개발 과정의 개요

    1. 개발 환경 설정

    • 워드프레스 개발 환경을 설정합니다.
    • 필요한 경우, 로컬 개발 환경(예: XAMPP, MAMP)을 사용합니다.

     

    2. 플러그인 기본 구조 생성

    • 워드프레스 플러그인의 기본 파일과 폴더 구조를 생성합니다.
    • plugin-name.php 파일을 만들고 플러그인 헤더 정보를 추가합니다.

     

    3. 캐노니컬 URL 검사 로직 구현

    • 워드프레스의 get_permalink() 함수를 사용하여 각 페이지의 캐노니컬 URL을 가져옵니다.
    • cURL이나 WordPress HTTP API를 사용하여 해당 URL이 리디렉션을 하는지 확인합니다.

     

    4. 관리자 알림 및 자동 수정 로직

    • 리디렉션을 감지하는 경우, 관리자 대시보드에 경고를 표시합니다.
    • 선택적으로, 캐노니컬 URL을 자동으로 수정하는 기능을 제공할 수 있습니다.

     

    5. 사용자 인터페이스(UI) 개발

    • 플러그인 설정 페이지를 만들어 관리자가 플러그인을 쉽게 관리할 수 있도록 합니다.
    • UI를 통해 사용자가 플러그인의 작동 방식을 조정할 수 있도록 합니다.

     

    6. 테스트 및 디버깅

    • 다양한 워드프레스 환경에서 플러그인을 테스트합니다.
    • 모든 기능이 예상대로 작동하는지 확인합니다.

     

    7. 배포 준비

    • 플러그인의 문서화를 완료합니다.
    • WordPress.org 플러그인 저장소에 배포하기 위한 준비를 합니다.

     

    주의 사항

    • 사용자가 캐노니컬 URL을 임의로 변경하지 못하도록 주의해야 합니다. 이는 SEO와 사이트 구조에 큰 영향을 줄 수 있습니다.
    • 플러그인 개발 시 WordPress 코딩 표준을 준수하는 것이 중요합니다.
    • 이러한 과정을 거쳐 워드프레스 플러그인을 개발할 수 있으며, 필요에 따라 추가 기능을 구현할 수도 있습니다. 워드프레스 플러그인 개발은 PHP 및 워드프레스 API에 대한 이해가 필요하며, 개발 경험이 있다면 더욱 수월할 것입니다.

     

    1. 플러그인 기본 구조 생성

    먼저, 워드프레스 플러그인의 기본 파일과 구조를 생성합니다. 이를 위해 canonical-checker.php 파일을 만듭니다.

     

    canonical-checker.php

     
    <?php
    /**
     * Plugin Name: Canonical Checker
     * Description: Checks if canonical URLs are redirected and alerts the admin.
     * Version: 1.0
     * Author: Your Name
     */
    
    if (!defined('ABSPATH')) {
        exit; // Exit if accessed directly.
    }
    
    // 메인 플러그인 클래스 선언
    class Canonical_Checker {
        public function __construct() {
            add_action('admin_init', array($this, 'check_canonical_urls'));
        }
    
        public function check_canonical_urls() {
            // 여기에 캐노니컬 URL 검사 로직 구현
        }
    }
    
    new Canonical_Checker();
    ?>

     

    2. 캐노니컬 URL 검사 로직 구현

    이제 각 페이지의 캐노니컬 URL을 검사하는 로직을 구현합니다. 이 예시에서는 WordPress의 HTTP API를 사용합니다.

     

    canonical-checker.php (계속)

    public function check_canonical_urls() {
        // 모든 페이지의 목록을 가져오는 쿼리
        $args = array(
            'post_type' => 'page',
            'posts_per_page' => -1, // 모든 페이지
        );
        $pages = new WP_Query($args);
    
        if ($pages->have_posts()) {
            while ($pages->have_posts()) {
                $pages->the_post();
                $page_id = get_the_ID();
                $canonical_url = get_permalink($page_id);
    
                // 캐노니컬 URL 확인
                $response = wp_remote_get($canonical_url);
                if (wp_remote_retrieve_response_code($response) != 200) {
                    // 관리자에게 경고 메시지
                    add_action('admin_notices', function() use ($page_id) {
                        ?>
                        <div class="notice notice-warning is-dismissible">
                            <p><?php echo 'Canonical URL redirected for page ID: ' . $page_id; ?></p>
                        </div>
                        <?php
                    });
                }
            }
        }
    }
     

     

    3. 검사 세부 로직 구현

    "Canonical points to redirect" 오류를 해결하기 위한 워드프레스 플러그인 개발의 핵심은 캐노니컬 URL 검사 로직의 구현입니다. 이 로직은 웹사이트의 각 페이지에 대해 캐노니컬 URL을 검사하고, 해당 URL이 리디렉션을 하고 있는지 여부를 확인합니다. 이 과정은 크게 다음과 같은 단계로 구성됩니다:

     

    • 모든 페이지의 캐노니컬 URL 가져오기
      • 워드프레스의 get_permalink() 함수를 사용하여 각 페이지의 캐노니컬 URL을 가져옵니다.
    • 캐노니컬 URL의 상태 확인
      • WordPress HTTP API를 사용하여 각 캐노니컬 URL에 HTTP 요청을 보냅니다.
      • 응답 상태 코드를 확인하여 URL이 리디렉션을 하는지 판단합니다. 일반적으로 리디렉션은 상태 코드 301 또는 302로 나타납니다.
    • 리디렉션 발견 시 경고 메시지 표시
      • 리디렉션을 감지하면, 관리자 대시보드에 경고 메시지를 표시하여 관리자가 문제를 인식하고 조치를 취할 수 있도록 합니다.

    이 검사 로직은 플러그인의 핵심 기능이며, 워드프레스 사이트의 SEO에 중요한 영향을 미칠 수 있습니다. 물론, 플러그인의 완성도를 높이기 위해서는 사용자 인터페이스, 추가 설정 옵션, 자동 수정 기능 등을 고려할 수 있지만, 기본적으로 캐노니컬 URL 검사 로직의 정확성과 효율성이 가장 중요합니다.

     

    해당 기능들을 추가하고 인터페이스(검사 후 url, 상태가 나오게), 추가 설정 옵션(필요한것 추론), 개별적으로 수정과 자동 일괄 수정을 선택해서 처리할 수 있도록하는 기능 등을 구현할 것입니다.
    1. 사용자 인터페이스(UI) 구현
    관리자 대시보드에 새로운 메뉴 항목을 추가하여, 검사 결과를 보여주는 페이지를 만듭니다.
    각 페이지의 캐노니컬 URL과 상태(정상, 리디렉션 발생)를 표시하는 테이블을 만듭니다.
    이 테이블에는 각 페이지에 대한 수정 옵션(수동 수정, 자동 수정 선택)도 포함됩니다.
    2. 추가 설정 옵션
    검사 주기 설정: 사용자가 검사를 수행할 주기를 설정할 수 있도록 합니다 (예: 매일, 매주, 매월).
    리디렉션 유형 선택: 어떤 리디렉션 코드(301, 302 등)를 문제로 간주할지 사용자가 선택할 수 있도록 합니다.
    이메일 알림: 리디렉션 문제가 감지되었을 때 이메일로 알림을 받을 수 있는 옵션을 제공합니다.
    3. 수동 및 자동 수정 기능
    수동 수정: 관리자가 각 페이지의 캐노니컬 URL을 직접 수정할 수 있는 옵션을 제공합니다.
    자동 일괄 수정: 리디렉션 문제가 있는 모든 페이지의 캐노니컬 URL을 자동으로 수정하는 기능을 구현합니다. 이 기능은 신중하게 설계되어야 하며, 잘못된 자동 수정이 다른 문제를 일으킬 수 있으므로 주의가 필요합니다.

     

     

    기본 구조

     
    <?php
    /*
    Plugin Name: Canonical Checker
    Description: Checks if canonical URLs are redirected and provides options to fix them.
    Version: 1.0
    Author: Your Name
    */
    
    if (!defined('ABSPATH')) exit; // Exit if accessed directly.
    
    class Canonical_Checker {
        public function __construct() {
            add_action('admin_menu', array($this, 'add_admin_menu'));
            add_action('admin_init', array($this, 'check_canonical_urls'));
        }
    
        public function add_admin_menu() {
            add_menu_page('Canonical Checker', 'Canonical Checker', 'manage_options', 'canonical-checker', array($this, 'render_admin_page'));
        }
    
        public function render_admin_page() {
            ?>
            <div class="wrap">
                <h1>Canonical Checker</h1>
                <!-- 여기에 검사 결과와 옵션을 표시하는 코드 추가 -->
            </div>
            <?php
        }
    
        public function check_canonical_urls() {
            // 캐노니컬 URL 검사 로직
        }
    }
    
    new Canonical_Checker();

     

    검사 로직

     
    public function check_canonical_urls() {
        // 페이지 목록을 가져오는 쿼리
        // 캐노니컬 URL 검사 로직 구현
        // 결과를 데이터베이스에 저장
    }

     

    관리자 페이지 렌더링

     
    public function render_admin_page() {
        ?>
        <div class="wrap">
            <h1>Canonical Checker</h1>
            <table class="wp-list-table widefat fixed striped">
                <thead>
                    <tr>
                        <th>Page ID</th>
                        <th>Canonical URL</th>
                        <th>Status</th>
                        <th>Actions</th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    // 데이터베이스에서 검사 결과를 가져와 테이블에 표시
                    ?>
                </tbody>
            </table>
        </div>
        <?php
    }

     

    check_canonical_urls 함수 보강

    페이지 목록을 가져오고, 캐노니컬 URL을 검사하여 결과를 데이터베이스에 저장하는 로직을 구현하기 위해, 다음과 같은 접근 방법을 사용할 수 있습니다. 이 코드는 Canonical_Checker 클래스 내의 check_canonical_urls 메서드에 포함될 것입니다.

     

    캐노니컬 URL 검사 및 데이터베이스 저장 로직

    canonical-checker.php (내부의 check_canonical_urls 메서드)

     
    public function check_canonical_urls() {
        global $wpdb;
    
        // 모든 페이지를 검색
        $args = array(
            'post_type' => 'page',
            'posts_per_page' => -1, // 모든 페이지
        );
        $pages = new WP_Query($args);
    
        if ($pages->have_posts()) {
            while ($pages->have_posts()) {
                $pages->the_post();
                $page_id = get_the_ID();
                $canonical_url = get_permalink($page_id);
    
                // 캐노니컬 URL 확인
                $response = wp_remote_get($canonical_url, array('redirection' => 0));
                $response_code = wp_remote_retrieve_response_code($response);
    
                // 리디렉션 검사
                if (in_array($response_code, [301, 302])) {
                    $status = 'redirect';
                } else {
                    $status = 'ok';
                }
    
                // 데이터베이스에 결과 저장
                $table_name = $wpdb->prefix . 'canonical_checker';
                $wpdb->replace($table_name, array(
                    'page_id' => $page_id,
                    'canonical_url' => $canonical_url,
                    'status' => $status,
                ));
            }
        }
    }

     

    데이터베이스 테이블 생성

    데이터베이스에 새로운 테이블을 만들어 결과를 저장하기 위해, 플러그인 활성화 시 테이블을 생성하는 코드를 추가합니다.

     

    canonical-checker.php (플러그인 활성화 시 실행될 부분)

     
    register_activation_hook(__FILE__, 'create_canonical_checker_table');
    
    function create_canonical_checker_table() {
        global $wpdb;
        $table_name = $wpdb->prefix . 'canonical_checker';
    
        $charset_collate = $wpdb->get_charset_collate();
    
        $sql = "CREATE TABLE $table_name (
            page_id mediumint(9) NOT NULL,
            canonical_url VARCHAR(255) NOT NULL,
            status VARCHAR(50) NOT NULL,
            PRIMARY KEY  (page_id)
        ) $charset_collate;";
    
        require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
        dbDelta($sql);
    }

     

    관리자 페이지 검사 결과 표시

    데이터베이스에서 캐노니컬 URL 검사 결과를 가져와 관리자 페이지의 테이블에 표시하는 부분을 구현하려면, render_admin_page 메서드 내에 해당 로직을 추가해야 합니다. 아래 코드는 이러한 기능을 구현하는 방법을 보여줍니다.

     

    관리자 페이지에 검사 결과 표시

    canonical-checker.php (내부의 render_admin_page 메서드)

     
    public function render_admin_page() {
        global $wpdb;
        $table_name = $wpdb->prefix . 'canonical_checker';
    
        // 데이터베이스에서 검사 결과 가져오기
        $results = $wpdb->get_results("SELECT * FROM $table_name");
    
        ?>
        <div class="wrap">
            <h1>Canonical Checker</h1>
            <table class="wp-list-table widefat fixed striped">
                <thead>
                    <tr>
                        <th>Page ID</th>
                        <th>Canonical URL</th>
                        <th>Status</th>
                        <th>Actions</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($results as $row) : ?>
                        <tr>
                            <td><?php echo esc_html($row->page_id); ?></td>
                            <td><?php echo esc_url($row->canonical_url); ?></td>
                            <td><?php echo esc_html($row->status); ?></td>
                            <td>
                                <!-- 여기에 수정 및 기타 작업을 위한 버튼 추가 -->
                                <a href="#" class="button action">Edit</a>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
        <?php
    }



Copyright 2024