안녕하세요.
아래와 같이 하나의 필터를 적용한 func 안에 또 다른 필터를 또 써도 되나요..?
if(!function_exists('application_end_date_extends_setting_update')){
add_filter('kboard_extends_setting_update', 'my_extends_setting_update', 10, 2);
function my_extends_setting_update($meta, $board_id){
$board = new KBoard($board_id);
$board->meta->my_date = isset($_POST['my_date'])?$_POST['my_date']: '';
add_filter('kboard_is_writer', 'no_more_writing', 10, 3);
function no_more_writing($is_writer, $board, $meta){
if(!$board->isAdmin() && $board == $this){
$current_date = date('YmdHis', current_time('timestamp'));
$my_date = $board->meta->my_date;
if($current_date >= $my_date){
$is_writer = false;
}
}
return $is_writer;
}
}
}
필터에 등록된 파라미터를 임의로 수정할 경우 정상적으로 동작하지 않습니다.
또한 코드를 분리하면 해결되실 듯합니다.
올려주신 코드 대신 아래의 코드로 교체해보시겠어요?
add_filter('kboard_extends_setting', 'my_extends_setting', 10, 3);
if(!function_exists('my_extends_setting')){
function my_extends_setting($html, $meta, $board_id){
if(in_array($board_id, array('1'))){ //마감일시 적용할 게시판의 id 추가 - 현재는 2 만.
$board = new KBoard($board_id);
echo '<table class="form-table"><tbody>';
$current_date = date('YmdHis', current_time('timestamp'));
$my_date = $board->meta->my_date ? $board->meta->my_date :'';
echo '<tr valign="top">';
echo '<th scope="row">마감일시 입력</th><td>';
echo '<input type="number" id="my_date" name="my_date" style="width: 20%;" value="'.$my_date.'" placeholder="'.$current_date.'">';
echo '<p class="description">날짜형식 : yyyymmddhhiiss</p>';
echo '</td></tr>';
echo '</tbody></table>';
return $html;
}
}
}
//확장기능 업데이트(저장) 클릭하면 실행
add_filter('kboard_extends_setting_update', 'my_extends_setting_update', 10, 2);
if(!function_exists('my_extends_setting_update')){
function my_extends_setting_update($board_meta, $board_id){
$board_meta->my_date = isset($_POST['my_date'])?$_POST['my_date']: ''; //my_date를 set
}
}
//my_date가 되면 작성 제한
add_filter('kboard_is_writer', 'no_more_writing', 10, 2);
if(!function_exists('no_more_writing')){
function no_more_writing($is_writer, $board){
if(!$board->isAdmin() && $board->id == '1'){ // 실제 게시판 id로 적용해주세요.
$current_date = date('YmdHis', current_time('timestamp'));
$my_date = $board->meta->my_date;
if($current_date >= $my_date){
$is_writer = false;
}
}
return $is_writer;
}
}
고맙습니다.
답변 감사합니다.
특정 날짜를 설정하여 해당 날짜가 지나면 글 수정을 제한하고자 하는 기능입니다.
이 기능을 게시판 관리자 페이지 - 확장 탭에 추가하려고 아래와 같은 코드를 작성해 보았습니다.
//마감일시 설정 - 관리자 확장기능에 추가
if(!function_exists('my_extends_setting')){
add_filter('kboard_extends_setting', 'my_extends_setting', 10, 3);
function my_extends_setting($html, $meta, $board_id){
if(in_array($board_id, array('2'))){ //마감일시 적용할 게시판의 id 추가 - 현재는 2 만.
echo '<table class="form-table"><tbody>';
$current_date = date('YmdHis', current_time('timestamp'));
$my_date = $board->meta->my_date ? $board->meta->my_date :'';
echo '<tr valign="top">';
echo '<th scope="row">마감일시 입력</th><td>';
echo '<input type="number" id="my_date" name="my_date" style="width: 20%;" placeholder="'.$current_date.'">';
echo '<p class="description">날짜형식 : yyyymmddhhiiss</p>';
echo '</td></tr>';
echo '</tbody></table>';
return $html;
}
}
}
//확장기능 업데이트(저장) 클릭하면 실행
if(!function_exists('my_extends_setting_update')){
add_filter('kboard_extends_setting_update', 'my_extends_setting_update', 10, 2);
function my_extends_setting_update($meta, $board_id){
$board = new KBoard($board_id);
$board->meta->my_date = isset($_POST['my_date'])?$_POST['my_date']: ''; //my_date를 set
//my_date가 되면 작성 제한
add_filter('kboard_is_writer', 'no_more_writing', 10, 3);
function no_more_writing($is_writer, $board, $meta){
if(!$board->isAdmin() && $board == $this){
$current_date = date('YmdHis', current_time('timestamp'));
$my_date = $board->meta->my_date;
if($current_date >= $my_date){
$is_writer = false;
}
}
return $is_writer;
}
}
}
안녕하세요~^^
워드프레스 필터나 액션 함수 내부에 또 다른 필터나 액션을 추가하실 수 있지만
상황에 따라서는 동작하지 않을 수도 있습니다.
올려주신 코드를 보니 함수 안에 함수가 새로 정의되어 있는데요.
이럴 경우 코드가 정상적으로 동작하지 않을 수도 있습니다.
올려주신 코드는 어떤 용도로 추가하셨는지
좀 더 구체적인 상황을 설명해주시겠어요?
고맙습니다.