새 블로그 설정 양식에 사용자 정의 블로그 옵션을 추가하는 방법은 무엇입니까?


17

간단한 요구 사항처럼 보이지만 어려움을 겪고 있습니다.

  1. "새 사이트 추가"에 옵션 필드를 추가하고 싶습니다 .
    간단한 텍스트 옵션이 좋습니다. 어떻게해야합니까?

  2. 사이트를 만들 때이 사용자 지정 블로그 옵션을 저장해야합니다.

    $meta제공된 옵션으로 변수 를 전달하는 'wpmu_new_blog'후크를 사용할 수 있다는 것을 알고 있지만 한 단계 로이 모든 것을 수행 할 수있는 방법이 있는지 궁금해서 다른 DB 쿼리를 수행하지 않아도됩니다. 전체 사이트 생성 프로세스를 재정의 / 교체 하시겠습니까?

노트:

MultiSite 설정과 함께 WP 3.3.1을 사용하고 있습니다. 지정된 맞춤 입력란 값과 일치하는 모든 사이트를 나열하는 플러그인을 작성하고 있습니다 ( "type"이라고 함).

또한 숙련 된 PHP 개발자이지만 여전히 WordPress 해킹을 처음 접하기 때문에 아직 다양한 WP 기능과 후크에 대해 잘 알고 있지는 않다고 가정하십시오.

답변:


9

두 답변 (*)에 합류하여 새 사이트 (프론트 및 백엔드)를 등록 할 때 사용자 정의 메타 옵션을 추가하고 사이트 화면의 열에 값을 표시하는 플러그인을 만들었습니다.

멀티 사이트 카테고리

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 ...

(*) 코드 참조

1- WordPress + Multisite : Network Admin에서 새 사이트 추가 양식에 사용자 정의 블로그 옵션을 추가하는 방법은 무엇입니까? @dennisg 님

2- 멀티 사이트 : 새 블로그 설정 양식에 사용자 정의 블로그 옵션을 추가하는 방법은 무엇입니까? , @tbuteler

add_action('wpmu_new_blog', 'add_new_blog_field');두 답변에서 합병되었습니다.

이미 다중 사이트에서 ID 열 코드를 사용하고 있었고 플러그인에 Category 열도 추가했습니다.

[최신 정보]

카테고리 열을 정렬 가능하게 만들려고 시도했지만 거의 해결할 수없는 것 같습니다 ...

이 질문 / 답변보기 : sites.php 또는 link-manager.php에서 '요청'및 'parse_query'필터가 실행되지 않습니다.

[갱신 2]

플러그인을 재 작업했으며 이제 범주를 정렬 할 수 있습니다. 플러그인의 첫 번째 버전은 Gist now (링크는 처음에 업데이트 됨)이며 새 버전 은 GitHub에 유지됩니다.


+1 안녕하세요, brasofilo입니다! 나는 이것을 시도하기를 고대하고있다 :)
Brian Lacy

8

멀티 사이트 가입 절차는 쉽게 조정할 수 없습니다. 다른 프로세스와 달리 많은 후크를 가지고 있지만 무거운 커스터마이징을 위해 너무 잘 어울리지 않는 것처럼 보이므로 좌절감을 이해합니다.

내가 올바르게 이해한다면 원하는 것을 달성하는 것이 그렇게 복잡하지는 않지만 주로 WordPress의 기본 동작을 무시하지 않고 한 단계 솔루션이 될 수는 없지만 주로 가입 (예 : 사용자가 사용자 정의 정보를 제출 할 때) 및 활성화 ( 즉, 새 블로그가 실제로 만들어 질 때)는 별도로 발생합니다.

시작하는 데 필요한 매우 거친 코드는 다음과 같습니다. 잘하면 그것은 올바른 방향으로 당신을 조종합니다 :

// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
    <label>An extra field</label>
    <input type="text" name="extra_field" value="" />
<?php
}

// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
    if(isset($_REQUEST['extra_field'])) {
        $meta['extra_field'] = $_REQUEST['extra_field'];
    }
    return $meta;
}

// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
    update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}

명심하십시오 :

  1. 플러그인을 통해 입력을 필터링하려면 선택 입력을 사용하여 제공된 옵션을 잠그는 것이 좋습니다.
  2. 등록 중에 일부 필드가 필요하고 유효성 검사를 통과하므로 (최소 문자, 사이트 이름에 허용되지 않는 문자, 블랙리스트 이름 등) 첫 번째 입력 값을 채울 때 $ _REQUEST 전역에서 추가 필드를 확인하는 것이 좋습니다. WordPress의 기본 필드 값을 수정하기 위해 다시 보낸 경우 사용자가 입력을 잃지 않도록합니다.
  3. 마지막 함수의 아이디어를 플러그인에 가장 적합한 것으로 대체 할 수 있지만 이제는 마지막 함수 내에서 필드 값을 사용할 수있게되어 길을가는 데 도움이됩니다.

마지막으로, 나중에 기존의 모든 블로그에서 모든 'extra_field'값을 처리하려면 정보를 단일 테이블에 저장하는 것이 좋습니다. update_site_option대신에 사용하십시오update_blog_option마지막 함수 하여 blog_id를 잃어 버릴 수 있습니다.이 경우에는 필요하지 않습니다.

어쨌든, 어떻게되는지, 행운을 알려주십시오!


큰 도움이되는 답변, 여기에 유용하게 사용할 수있는 많은 정보 :) 나는 이미 현상금을 얻었 기 때문에 brasofilo에 베스트 답변을 수여합니다.
Brian Lacy

멋진 답변입니다. 감사합니다. update_blog_option ()을 실행하지 않으면 추가 필드가 사이트 옵션에 추가되는 이유를 알고 있습니까? process_extra_field_on_blog_signup () 및 exit () 내부의 값을 에코 처리했으며 extra_filed가 옵션에 추가되었습니다. 그러나 exit ()없이 실행하면 extra_field가 wp_xx_options에 추가되지 않습니다.
thatryan

@ thatryan, 그게 이상하다 ... 뭔가 데이터베이스에서 값을 제거하거나 (아마도) 전혀 추가되지 않는 것입니다. 몇 가지 테스트를 더 시도하고 알아내는 데 문제가 있으면 언제든지 질문을 게시하십시오. 이 답변은 아마도 WordPress 3.5 또는 이전 버전에 대한 것일 수 있으므로 최신 버전에서 변경되었을 수 있습니다.
Tomas Buteler

-1

site-new.php 코드를 보면 이미 답을 얻었을 것입니다.

양식에 추가 할 수 있는지 확인하는 조건은 없습니다. 그러나 파일을 연구했으며 site-new.php에 수동 으로이 입력 필드를 추가하고 배열의 메타 값을 wpmu_create_blog 함수에 전달하여 77 줄 근처에있는 wpmu_create_blog 함수에 전달해야한다고 생각합니다. 기능이 무엇을하는지에 따라 원하는 것이 될 수 있습니다.

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