WordPress + 멀티사이트:Network Admin에서 Add New Site 양식에 커스텀 블로그 옵션을 추가하는 방법
커스터마이즈하려는 WordPress 다중 사이트 설치에서 새 블로그 사이트를 만들기 위한 입력 양식에 간단한 텍스트 필드를 추가해야 합니다. 이 필드는 다음 위치에 있습니다.
Network Admin > Sites > Add New
당연히 이 필드는 해당 폼의 다른 메타데이터와 함께 저장되어야 합니다.{new_blog_prefix}_options
테이블.
특히, 가장 심플하고, 가장 알기 쉽고, 또는 「올바른 방법」에 흥미가 있습니다(즉,WordPress Way)를 통해 이를 달성할 수 있지만, 저는 The Way That Works™에 만족합니다!
지금까지 저는 수많은 막다른 골목에 부딪혀 왔습니다.
설정 API - [WP Codex]
내가 알기로는 설정 API (a)는 Network Admin 섹션에서 작동하지 않을 수 있습니다(이것은 WP의 최근 버전에서 변경되었을 수 있지만). 또한 (b) 이것은 사용자가 화면에서 추가/수정만 할 수 있는 것처럼 보입니다.
Settings
를 참조하십시오.wpmu_options hook - [DB 훅]
네트워크 설정 화면에 옵션을 추가하기 위한 전용 후크인 것 같습니다.
add_site_option / add_blog_option - [WP Codex]
찾을 수 있는 범위 내에서 사이트 고유의 옵션을 추가할 수 있습니다.
{blogsite_prefix}_options
테이블은 관리 양식에 옵션을 추가하는 데 도움이 되지 않습니다.
그럼... 주사위는 없어어떤 도움이라도 감사합니다!
Add New Site' 페이지의 소스 코드를 보면 WordPress가 이 목적을 위한 후크를 제공하지 않는다는 것을 알 수 있습니다.물론 후크를 직접 추가할 수도 있지만 일반적으로 WordPress 코어를 편집하는 것은 좋지 않습니다.
다만, 송신되어 모든 정보가 표시되면, 이 페이지는 함수 wpmu_create_blog()를 호출합니다.이 기능에는 액션이라는 후크가 있습니다.wpmu_new_blog
:
do_action( 'wpmu_new_blog', $blog_id, $user_id, $domain, $path, $site_id, $meta );
이 시점에서 블로그는 이미 작성되어 있습니다.단, 이 액션에 접속하여 데이터베이스에 저장함으로써 필드가 송신되었는지 여부를 검출할 수 있습니다.플러그인 파일(또는 템플릿)에 다음 항목을 추가합니다.
function add_new_blog_field($blog_id, $user_id, $domain, $path, $site_id, $meta) {
// Make sure the user can perform this action and the request came from the correct page.
switch_to_blog($blog_id);
// Use a default value here if the field was not submitted.
$new_field_value = 'default';
if ( !empty($_POST['blog']['new_field']) )
$new_field_value = $_POST['blog']['new_field'];
// save option into the database
update_option( 'new_field', $new_field_value);
restore_current_blog();
}
add_action( 'wpmu_new_blog', 'add_new_blog_field' );
이 필드를 페이지에 표시하는 경우 JavaScript 방식을 사용할 수 있습니다.javascript 파일을 '새 사이트 추가' 페이지에만 추가하고 필드를 페이지의 올바른 위치에 삽입하는 페이지의 onLoad를 추가합니다.'blog[new_field]'라는 이름의 입력 필드를 추가해야 합니다.다음 JavaScript 파일을 만듭니다.이 파일을 로드하면 새 필드가 '새 사이트 추가' 페이지에 추가됩니다.
(function($) {
$(document).ready(function() {
$('<tr class="form-field form-required"></tr>').append(
$('<th scope="row">New field</th>')
).append(
$('<td></td>').append(
$('<input class="regular-text" type="text" title="New Field" name="blog[new_field]">')
).append(
$('<p>Explanation about your new field</p>')
)
).insertAfter('#wpbody-content table tr:eq(2)');
});
})(jQuery);
이제 이 파일을 플러그인 파일에 추가하여 '새 사이트 추가' 페이지에 포함하기만 하면 됩니다.
// Only add the script for the page site-new.php (the page hook).
add_action( "admin_print_scripts-site-new.php", 'my_admin_scripts' );
function my_admin_scripts() {
wp_register_script('yourScript', plugins_url('js/yourScript.js', __FILE__));
wp_enqueue_script('yourScript');
}
필요에 따라 다음 사항을 제안할 수 있습니다.add_settings_field를 사용하여 일반 설정 페이지에 입력 필드를 추가합니다.이 필드가 나중에 기본 설정일 경우에만 편집할 수 있습니다.이 필드는 나중에 변경할 수 없습니다.
이게 당신이 필요로 하는 도움이었으면 좋겠어요.
저는 단지 제 솔루션을 공유하고자 했습니다. 즉, 색상에 대한 사이트 설정을 추가하는 것입니다.설정이 존재하지 않는 경우는, 슈퍼 관리자 또는 관리자가 다음에 사이트를 방문할 때에, 각각의 색상으로 설정됩니다.설정되어 있는 경우는, 유저의 설정 대신에 사용됩니다.다음 코드는 나중에 이 정보를 접하는 사람에게 도움이 되는 경우입니다.
add_filter('get_user_option_admin_color', 'change_admin_color');
function change_admin_color($user_admin_color) {
global $_wp_admin_css_colors;
$admin_colors = $_wp_admin_css_colors;
$admin_color = $user_admin_color;
if ( 1 == $wpmu ) {
if ( ! get_site_option( 'site_admin_color' ) && is_super_admin() ) {
add_site_option( 'site_admin_color', $user_admin_color); //add, not update
return $user_admin_color;
} else {
$admin_color = get_site_option( 'site_admin_color' );
if( key_exists($admin_color,$admin_colors) ) {
return $admin_color;
}
}
} else {
if ( ! get_option( 'site_admin_color' ) && is_admin() ) {
add_option( 'site_admin_color', $user_admin_color, '', 'yes' ); //add, not update
return $user_admin_color;
} else {
$admin_color = get_option( 'site_admin_color' );
if( key_exists($admin_color,$admin_colors) ) {
return $admin_color;
}
}
}
return $user_admin_color;
}
언급URL : https://stackoverflow.com/questions/10339053/wordpress-multisite-how-to-add-custom-blog-options-to-add-new-site-form-in-ne
'programing' 카테고리의 다른 글
URI [/WEB-INF/pages/apiForm.jsp]를 사용한 HTTP 요청에 대한 매핑을 찾을 수 없습니다. (0) | 2023.03.02 |
---|---|
각도 테스트셀레늄이 있는 JS (0) | 2023.03.02 |
Django REST Framework 업로드 이미지: "제출된 데이터가 파일이 아닙니다." (0) | 2023.03.02 |
html을 반응으로 안전하게 렌더링하는 방법 (0) | 2023.03.02 |
Angular JS - $anchor Scroll 스무스 / 지속시간 (0) | 2023.03.02 |