>  기사  >  백엔드 개발  >  고급: 재사용 가능한 사용자 정의 메타 상자: 고급 필드

고급: 재사용 가능한 사용자 정의 메타 상자: 고급 필드

WBOY
WBOY원래의
2023-09-02 18:17:08861검색

사용자 정의 메타 상자 템플릿 튜토리얼 시리즈 1부에서는 일련의 필드를 반복하고 다양한 유형의 양식 필드에 필요한 HTML과 함께 각 필드를 출력하는 사용자 정의 메타 상자를 설정하는 방법을 다뤘습니다. 이제 어레이와 스위치 박스에 몇 가지 고급 항목을 추가할 준비가 되었습니다.


방송그룹

라디오 버튼은 체크박스와 같은 켜기/끄기 스위치가 아니라 사용자가 두 가지 옵션 중 적어도 하나를 선택하도록 강제하는 데 사용되므로 실제로 단독으로 사용되지 않습니다. 가장 먼저 해야 할 일은 $custom_meta_fields 배열에 단일 옵션을 추가하는 것입니다.

으아악

이 항목을 1부에서 시작한 원본 $custom_meta_fields 배열의 다른 배열 항목에 추가하세요.

이 배열은 셀렉트박스 항목과 거의 동일합니다. 여기에는 기본 태그, 설명 및 고유 ID가 있습니다. 유형을 정의한 다음 옵션 배열을 추가합니다. 나중에 저장된 값을 얻기 위해 저장된 배열을 확인할 것이므로 옵션 키가 옵션 값과 동일한 것이 중요합니다.

으아악

이 코드는 메타 박스 스위치의 마지막 "break;" 뒤에 추가됩니다.

  • 필드 중첩된 "옵션" 배열의 각 옵션을 반복합니다
  • 인라인 조건을 사용하여 저장된 값이 현재 열려 있는 값과 일치하는지 확인하고, true인 경우 "checked" 속성을 출력합니다
  • 옵션 값을 라벨의 고유 ID로 사용하세요
  • 다음 옵션이 새 줄에 오도록 끝에 개행 문자를 추가하세요
  • 설명 필드로 끝납니다. 옵션을 반복할 때
    하나를 남겼으므로 앞의 "
  • "는 필요하지 않습니다.

체크박스 그룹

체크박스를 스위치로 사용하는 방법과 여러 옵션 중에서 하나를 선택하는 방법을 다루었지만 동일한 필드에 여러 값을 저장할 수 있기를 원하시나요? 여기가 체크박스 그룹이 유용한 곳입니다.

으아악

이를 $custom_meta_fields 배열에 다시 추가하면 고유 ID와 정의된 유형이 있는 유사한 필드와 설정이 거의 동일합니다.

으아악

여기서 가장 큰 차이점은 이 데이터를 배열로 저장한다는 것입니다.

  • 배열에 정의된 각 옵션을 반복합니다
  • 이름 끝에 대괄호를 추가하여 배열에 데이터를 저장합니다: []
  • "checked" 속성을 출력하는 인라인 조건에서 "in_array()"를 사용하여 값이 배열 내부에 있는지 확인하세요
  • 이전과 동일하게 각 입력에 값을 추가하고 루프를 닫은 후 설명을 출력합니다

카테고리 선택

다양한 목적에 맞게 사용자 정의 분류를 제공할 수 있다는 것은 좋지만 때로는 사용자가 게시물당 하나의 용어만 선택하도록 제한하고 싶을 때도 있습니다. 간단한 해결책은 WordPress가 게시물 작성 페이지에 추가하는 기본 선택 상자를 제거하고 이를 사용자 정의 메타 상자에 선택 상자로 추가하는 것입니다.

으아악

이 예에서는 내장된 분류 "카테고리"를 사용하겠습니다. $custom_meta_fields 배열에 추가하세요. "id"가 카테고리 이름과 동일한지 확인하세요.

으아악

이 필드를 완벽하게 작동하려면 우리가 설정한 다른 필드보다 더 많은 정보가 필요합니다.

  • 선택 상자를 열고 "하나 선택"으로 빈 값을 추가하세요.
  • 세트 분류에 대한 모든 용어 가져오기
  • 현재 카테고리에 대해 저장된 용어 가져오기
  • 각 학기마다 반복을 시작하세요.
  • 간단하고 읽기 쉬운 상태를 유지하기 위해 저장된 용어와 일치하면 옵션을 출력하고 그렇지 않으면 일반 옵션을 출력하는 전체 크기 조건문을 사용합니다.
  • 루프를 닫고 상자를 선택하면 분류에 대한 정보를 가져와 변수에 저장하려고 합니다.
  • 설명 영역을 사용하여 사용자를 분류 용어를 관리할 수 있는 영역으로 연결하는 간단한 방법으로 사용하세요. 우리가 수집한 $taxonomy 정보의 태그를 사용하여 복수형이 올바른지(카테고리 같은 것이 없음) 확인하세요.

기본 카테고리 상자 삭제

사용자 경험이나 데이터 저장 측면에서 충돌 없이 기본 상자를 사용자 정의 선택 상자로 재정의하고 싶기 때문에 화면에서 분류 편집 상자를 제거해야 합니다.

으아악

여기에서 $custom_meta_fields 数组来循环遍历每个“tax_select”字段并将其添加到此删除函数中,但单独命名它们可能要简单得多。您需要知道分类框的 div 的 ID,才能正确删除它。在 WordPress Codex 中了解有关 remove_meta_box() 배열을 사용하여 각 "tax_select" 필드를 반복하고 이 삭제 기능에 추가할 수 있지만 개별적으로 이름을 지정하는 것이 훨씬 더 간단할 것입니다. 카테고리 상자를 올바르게 삭제하려면 카테고리 상자의 div ID를 알아야 합니다. WordPress Codex에서 remove_meta_box()에 대해 자세히 알아보세요.

약관 저장

이 필드의 마지막 단계는 분류가 사용자 정의 필드가 아닌 있는 그대로 저장되었는지 확인하는 것입니다. 이를 위해 이 시리즈의 1부에서 만든 save_custom_meta() 함수를 다시 수정하겠습니다.

먼저 필드 루프에서 건너뜁니다. 다음 줄을 찾으세요:

으아악

그런 다음 다음 줄을 추가하세요:

으아악

그런 다음 foreach 루프 뒤에 다음을 추가하세요.

으아악

이것은 카테고리 선택 필드의 값을 가져와 게시물의 카테고리 용어로 설정합니다.


发布选择

另一个不太可能但有用的字段是通过将 ID 保存在自定义字段中来将另一个帖子与某个帖子关联起来。这非常类似于 CMS,我发现它对于诸如链接幻灯片帖子类型以转到网站上的另一个帖子或页面之类的事情非常有用,只需从下拉菜单中选择它即可。您可以稍后在另一个函数中使用该 ID 查询该帖子,以从该帖子中获取您需要的任何信息。

array(
	'label' => 'Post List',
	'desc' => 'A description for the field.',
	'id' 	=>  $prefix.'post_id',
	'type' => 'post_list',
	'post_type' => array('post','page')
)

我们这里有所有常见的嫌疑人,但最后我们添加了一个额外的变量来保存您想要在列表中的帖子类型。您可以在此数组中包含帖子、页面和任何其他自定义帖子类型。

// post_list
case 'post_list':
$items = get_posts( array (
	'post_type'	=> $field['post_type'],
	'posts_per_page' => -1
));
	echo '<select name="'.$field['id'].'" id="'.$field['id'].'">
			<option value="">Select One</option>'; // Select One
		foreach($items as $item) {
			echo '<option value="'.$item->ID.'"',$meta == $item->ID ? ' selected="selected"' : '','>'.$item->post_type.': '.$item->post_title.'</option>';
		} // end foreach
	echo '</select><br /><span class="description">'.$field['desc'].'</span>';
break;

您可以添加很多选项来过滤此查询,但我们使用的是对设置帖子类型的所有帖子的基本抓取。

  • 查询所有帖子
  • 打开选择字段并添加空白值
  • 循环遍历每个帖子,并将 ID 设置为选项的值,并将标有帖子类型的标题设置为可供选择的显示文本
  • 关闭循环和选择字段并添加说明

结论

如果到目前为止您一直在关注本系列的两个部分,那么您的最终盒子应该如下图所示:

고급: 재사용 가능한 사용자 정의 메타 상자: 고급 필드

我们确实正在填写可重复使用的模板,用于创建可重复的自定义元框字段,并添加了这种高级甚至非正统的字段。我们将在下一篇文章中用一些更棘手但有用的字段(例如日期选择器和图像上传器)来结束该系列。

위 내용은 고급: 재사용 가능한 사용자 정의 메타 상자: 고급 필드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.