네트워크 설정 화면에서 새 사이트 전체 옵션 필드를 추가하는 방법은 무엇입니까?


15

나는 플러그인을 만들고 있는데 그중 일부는 WordPress 네트워크의 모든 사이트에 적용되는 옵션 값을 설정하는 것과 관련이 있습니다. wp_sitemeta 테이블에 값을 저장할 수 있는 add_site_optionget_site_option 함수 에 대해 알고 있지만 알아낼 수없는 것은 WordPress 백엔드에서 적절한 위치에 필드를 배치하는 방법과 사이트 전체의 저장을 가로 채는 방법입니다 그런 경우 add_site_option 호출을 삽입하기위한 값.

첫 번째 문제 (필드 추가)의 경우 일반적으로 Settings API, 특히 register_settingadd_settings_field를 사용합니다.새 옵션을 허용 한 다음 해당 옵션 페이지에 해당 필드를 삽입하십시오. 그러나 add_settings_field를 사용하여 백엔드의 새 네트워크 관리자 섹션에있는 설정 페이지에 필드를 추가 할 수 있는지 여부, 네트워크 관리자 페이지에서 수행하는 기능을 수행하는 대체 기능이 있는지 여부에 대한 정보를 찾을 수 없습니다. HTML을 수동으로 주입하면됩니다. (필드를 반향하는 기능을 작성한 다음 해당 기능을 "wpmu_options"작업에 연결하면 Network Admin의 설정 페이지 끝에서 실행됩니다. 그러나 nonces도 처리해야합니다. 그리고 다른 모든 것은 수동으로).

두 번째 문제는 아마도 사용자가 네트워크 관리자 설정 페이지에서 "저장"을 눌렀을 때 실행되는 작업을 찾는 것과 관련이 있지만 아직 찾지 못했습니다. 모든 리드는 크게 감사하겠습니다.

그래서-생각? 새로운 네트워크 관리 영역을 통해 플러그인에 대한 사이트 전체 옵션을 관리 할 수있는 우아한 방법이 있습니까? 그렇다면 어떻게 되었습니까?

답변:


11

wpmu_options네트워크 설정 페이지에 더 많은 HTML을 추가 할 수 있는 작업이 있습니다.

자신의 하위 메뉴 / 페이지를 설정 상위 메뉴에 추가하려는 경우 :

add_action('network_admin_menu', 'add_my_netw_settings_page');
function add_my_netw_settings_page() {
  add_submenu_page(
       'settings.php',
       'Co za asy',
       'Co za asy',
       'manage_network_options',
       'my-netw-settings',
       'your_form'
  );    
}

function your_form(){
  $options = get_site_option('your_plugin');

  ?>
  <form action="<?php echo admin_url('admin-post.php?action=update_my_settings'); ?>" method="post">
    <?php wp_nonce_field('your_plugin_nonce'); ?>

    ...fields go here...

  </form>
  <?php
}

저장 핸들러 :

add_action('admin_post_update_my_settings',  'update_my_settings');
function update_my_settings(){     
  check_admin_referer('your_plugin_nonce');
  if(!current_user_can('manage_network_options')) wp_die('FU');

  // process your fields from $_POST here and update_site_option

  wp_redirect(admin_url('network/settings.php?page=my-netw-settings'));
  exit;  
}

위에서 언급 한 해당 조치를 사용하도록 선택한 경우 저장 핸들러를 유지하고 양식을 해당 조치에 연결하십시오.


1
다음은 기본적으로 동일한 접근 방식을 설명하는 기사입니다. xplus3.net/2011/07/13/wordpress-network-admin-pages
mltsy

1

기본적으로 자체 네트워크 관리자 설정 페이지를 만들지 않으려면 다른 두 가지 답변에서 별도로 언급 된 두 가지 후크를 사용해야합니다.

add_filter( 'wpmu_options' , 'show_network_settings' );
add_action( 'update_wpmu_options', 'save_network_settings' );

function save_network_settings() {
  // checkbox example
  if( isset( $_POST['my_network_checkbox'] ) )
    update_site_option( 'my_network_checkbox', '1' );

  // textfield example
  if( isset( $_POST['my_network_textfield'] ) )
    update_site_option( 'my_network_textfield', sanitize_text_field($_POST['my_network_textfield']) );
}

function show_network_settings() {
    $checkbox = get_site_option('my_checkbox'); 
    $text = get_site_option('my_text'); 
    ?>
    <h3><?php _e('My Network Settings','my-plugin'); ?></h3>
    <table class="form-table">
        <tbody>
            <tr>
                <th scope="row"><?php _e('My Checkbox','my-plugin'); ?></th>
                <td>
                    <label>
                        <input type='checkbox' name='my_checkbox' value='1' <?php checked( $checkbox, '1' ); ?> /> 
                    <?php _e('Check my box.','my-plugin'); ?>
                    </label>
                </td>
            </tr>
            <tr>
                <th scope="row"><label for="my_text"><?php _e('My Text','my-plugin'); ?></label></th>
                <td>
                        <input type='text' name='my_text' value='<?php echo $text; ?>' />
                </td>
            </tr>
        </tbody>
    </table>
    <?php
}

매우 명확한 설명과 유용한 코드 샘플은 http://zao.is/2013/07/adding-settings-to-network-settings-for-wordpress-multisite/를 참조하십시오.


0

내가 아는 유일한 방법은 수동으로 html을 주입하고 옵션의 업데이트를 직접 처리하는 방법이라고 생각합니다. 옵션을 저장하는 데 필요한 조치는 update_wpmu_options입니다. 필요한 경우 더 자세한 예를 제공 할 수 있습니다. 알려주세요.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.