"새로 추가"사용자 정의 필드 드롭 다운에 사전 정의 된 옵션을 추가하려면 어떻게해야합니까?
다음은 새 사용자 정의 필드를 자동으로 추가하고 표시하는 두 가지 예입니다.
그것은 내가하고 싶은 것에 가깝습니다. 내 목표는 미리 정의 된 옵션을 "새로 추가"사용자 지정 파일 드롭 다운에 추가하는 것이지만 블로거가 추가 할 때까지 필드로 표시하지 않도록하는 것입니다.
플러그인을 사용하지 않고이를 수행하는 방법을 알고 싶습니다.
"새로 추가"사용자 정의 필드 드롭 다운에 사전 정의 된 옵션을 추가하려면 어떻게해야합니까?
다음은 새 사용자 정의 필드를 자동으로 추가하고 표시하는 두 가지 예입니다.
그것은 내가하고 싶은 것에 가깝습니다. 내 목표는 미리 정의 된 옵션을 "새로 추가"사용자 지정 파일 드롭 다운에 추가하는 것이지만 블로거가 추가 할 때까지 필드로 표시하지 않도록하는 것입니다.
플러그인을 사용하지 않고이를 수행하는 방법을 알고 싶습니다.
답변:
필드는 기존 필드에서 가져오고 후크가 없으므로 순수 PHP로는이를 수행 할 수 없습니다. 그러나 JavaScript를 사용하여 게시물 유형이 사용자 정의 필드를 지원하는지 확인하고 해당 필드가 존재하지 않는지 확인한 후 삽입하십시오.
<?php # -*- coding: utf-8 -*-
/* Plugin Name: Extend custom fields */
add_action( 'admin_footer-post-new.php', 'wpse_98269_script' );
add_action( 'admin_footer-post.php', 'wpse_98269_script' );
function wpse_98269_script()
{
if ( ! isset ( $GLOBALS['post'] ) )
return;
$post_type = get_post_type( $GLOBALS['post'] );
if ( ! post_type_supports( $post_type, 'custom-fields' ) )
return;
?>
<script>
if ( jQuery( "[value='demo_data']" ).length < 1 ) // avoid duplication
jQuery( "#metakeyselect").append( "<option value='demo_data'>demo_data</option>" );
</script>
<?php
}
# -*- coding: utf-8 -*-
무엇입니까? 그 주석 스타일은 WordPress에 특별한 것을 의미합니까? 감사합니다!!!! :)
# -*- coding: utf-8 -*-
는 인코딩 쿠키로 편집기에서 파일 인코딩을 감지하는 데 도움이됩니다. Vim, Scite 및 다른 편집자들이 읽을 것입니다. 표준 PHP 템플릿의 일부입니다.
<select>
했습니다 (아직 존재하지 않는다면 if 를 만들어야 했습니다). 도움을 주셔서 감사합니다. 정말 감사합니다 !!!!!
function add_predefined_custom_field_names( $query ) {
$predefined = array(
'www.cyberxoft.com'
);
global $table_prefix;
$query = preg_replace('/[\r\n\t]/', ' ', $query); //minify by removing all tabs and line breaks
$query = preg_replace('/\s+/', ' ', $query); //minify by replacing spaces, tabs and carriages to single space
//SELECT meta_key FROM wp_postmeta GROUP BY meta_key HAVING meta_key NOT LIKE '\\_%' ORDER BY meta_key LIMIT 30
$pattern = ("/SELECT meta_key FROM ".$table_prefix."postmeta/i");
if( preg_match($pattern, $query) ) {
$keys = '';
foreach($predefined as $key){$keys .= (" UNION SELECT '$key' AS meta_key");}
$query = preg_replace('/SELECT/i', 'SELECT meta_key FROM (SELECT', $query);
$query = preg_replace('/FROM wp_postmeta/i', ('FROM wp_postmeta'.$keys), $query);
$query = preg_replace('/ GROUP BY/i', ')t GROUP BY', $query);
}
return $query;
}
add_filter('query', 'add_predefined_custom_field_names');
테마 function.php에 위의 코드를 추가하십시오. 위의 코드를 추가 한 후 'www.cyberxoft.com'을 선택 옵션 중 하나로 드롭 다운에 추가합니다.
당신이 그것을 볼 수 있다면, 'www.cyberxoft.com'을 필요한 필드 이름으로 바꾸고 관리자 페이지를 새로 고치십시오. 그런 일이 발생하면 원하는만큼 추가하십시오. 기본 제한 설정으로 간주됩니다.
즐겨...
아래는 @toscho가 게시 한 멋진 스크립트 의 수정 된 버전입니다 . 방금 <select>
존재하지 않는 경우 만들 수있는 기능이 필요했습니다 .
/**
* Programatically add custom fields.
*
* @see http://wordpress.stackexchange.com/questions/98269/programatically-add-options-to-add-new-custom-field-dropdown/
*/
function wpse_98269_script() {
if (isset($GLOBALS['post'])) {
$post_type = get_post_type($GLOBALS['post']);
if (post_type_supports($post_type, 'custom-fields')) {
?>
<script>
// Cache:
var $metakeyinput = jQuery('#metakeyinput'),
$metakeyselect = jQuery('#metakeyselect');
// Does the default input field exist and is it visible?
if ($metakeyinput.length && ( ! $metakeyinput.hasClass('hide-if-js'))) {
// Hide it:
$metakeyinput.addClass('hide-if-js'); // Using WP admin class.
// ... and create the select box:
$metakeyselect = jQuery('<select id="metakeyselect" name="metakeyselect">').appendTo('#newmetaleft');
// Add the default select value:
$metakeyselect.append('<option value="#NONE#">— Select —</option>');
}
// Does "demo_data" already exist?
if (jQuery("[value='demo_data']").length < 1) {
// Add option:
$metakeyselect.append("<option value='demo_data'>demo_data</option>");
}
</script>
<?php
}
}
}
add_action('admin_footer-post-new.php', 'wpse_98269_script');
add_action('admin_footer-post.php', 'wpse_98269_script');
내 JS 적응이 향상 될 수 있다고 확신하지만 작업이 완료됩니다. 변경 / 개선하면 업데이트 된 코드를 여기에 다시 게시합니다.
다시 감사합니다 @toscho !!!! 내가 당신 께 신세를지는 거죠. :)