WordPress 콜백 함수에서 게시 메타 가져오기
저는 제 첫 번째 WP 플러그인 작업 중이고, 막혔습니다.
콘텐츠 편집기 아래 게시 페이지에 사용자 정의 필드(필드 1)를 만들었습니다.올바르게 저장됩니다.:)
미디어를 추가할 때 미디어 라이브러리 팝업 내에 사용자 정의 필드(필드 2)를 만들었습니다.올바르게 저장됩니다.:)
제가 하고 싶은 것은 필드 1의 값을 필드 2의 기본값으로 사용하는 것입니다.
attachment_fields_to_edit 콜백 함수에 문제가 있는 것 같습니다.
$post는 이제 게시물 자체가 아닌 실제 "파일 첨부 게시물"을 참조하는 것으로 생각되므로 저장된 값을 참조할 때 다음과 같이 하십시오.
$post_meta = get_post_meta( $post->ID );
현재 게시물이 아닌 해당 첨부 파일과 관련된 모든 메타 데이터를 끌어오는 중입니다.실제 게시물에서 메타를 꺼내는 것이 가능합니까?
이 코드는 Codex에서 가져온 것입니다.
function my_add_attachment_location_field( $form_fields, $post ) {
$field_value = get_post_meta( $post->ID, 'location', true );
$form_fields['location'] = array(
'value' => $field_value ? $field_value : '',
'label' => __( 'Location' ),
'helps' => __( 'Set a location for this attachment' )
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'my_add_attachment_location_field', 10, 2 );
function my_save_attachment_location( $attachment_id ) {
if ( isset( $_REQUEST['attachments'][$attachment_id]['location'] ) ) {
$location = $_REQUEST['attachments'][$attachment_id]['location'];
update_post_meta( $attachment_id, 'location', $location );
}
}
add_action( 'edit_attachment', 'my_save_attachment_location' );
첨부 파일을 삽입하는 현재 게시물에 대한_post_meta를 어떻게 얻을 수 있습니까?이는 위의 codex 코드에 있는 my_add_attachment_location_field 콜백 함수에서 발생해야 합니다.
감사합니다!
제가 생각할 수 있는 한 가지 방법은:
$post_post_id = $post->post_parent;
그러면 다음을 수행할 수 있습니다.
get_post_id)
다음을 시도할 수 있습니다.
/**
* Display custom 'location' attachment field
*/
function so_22850878_attachment_fields_to_edit( $form_fields, $post )
{
$field_value = get_post_meta( $post->post_parent, 'location', true );
$form_fields['location'] = array(
'value' => $field_value ? $field_value : '',
'label' => __( 'Location' ),
'helps' => __( 'Set a location for this attachment' )
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit',
'so_22850878_attachment_fields_to_edit', 10, 2 );
그리고.
/**
* Edit attachment fields
*/
function so_22850878_edit_attachment( $attachment_id )
{
$p = get_post( $attachment_id );
if ( isset( $_REQUEST['attachments'][$attachment_id]['location'] ) )
{
$location = $_REQUEST['attachments'][$attachment_id]['location'];
// Save the value of the 'location' attachment field
// to the 'location' post meta of the post parent if it exists:
if( ! is_null( $p )
&& 0 < $p->post_parent
)
update_post_meta( $p->post_parent,
'location',
sanitize_text_field( $location )
);
}
}
add_action( 'edit_attachment', 'so_22850878_edit_attachment' );
업데이트location
미디어 팝업에서 상위 게시물의 게시 메타 값.
미디어 라이브러리 페이지에서 직접 첨부 파일을 편집하는 경우에도 이 항목을 체크아웃할 수 있습니다.
/**
* Save attachment fields
*/
function so_22850878_attachment_fields_to_save( $post, $attachment )
{
$p = get_post( $post['ID'] );
// Save the value of the 'location' attachment field
// to the 'location' post meta of the post parent if it exists:
if( isset( $attachment['location'] )
&& ! is_null( $p )
&& 0 < $p->post_parent
)
update_post_meta( $p->post_parent,
'location',
sanitize_text_field( $attachment['location'] )
);
return $post;
}
add_action( 'attachment_fields_to_save',
'so_22850878_attachment_fields_to_save', 10, 2 );
어떤 종류의 워크플로우를 염두에 두고 있는지는 모르겠지만, 제가 이해하기로는 당신의 아이디어에 문제가 있다고 생각합니다.
업데이트할 때
location
미디어 팝업의 필드, 업데이트를 원하는 것처럼 보입니다.location
상위 게시물에 대한 게시 메타 값입니다.하지만 포스트 에디터에 이미지를 삽입해도 포스트 에디터 화면이 업데이트되지 않기 때문에location
게시물을 업데이트할 때 이전 값으로 값을 덮어씁니다.
그래서 저는 당신이 숨겨진 포스트 메타 값을 대신 사용할 수 있는지 궁금합니다, 예를 들어._location
?
이게 도움이 되길 바랍니다.
좋아요. 다른 방법을 시도해 보세요. 탐색기에 있는 동안에는 게시물 ID를 쉽게 얻을 수 없습니다.위치가 어디인지 잘 모르겠지만 이미지를 포스트 메타로 저장하려면 이것을 사용합니다........
단계:
1.새 js 파일을 생성하고 http://jsfiddle.net/dheffernan/BB37U/2/ 을 방문하여 js 파일에 js를 복사합니다. miu_script.js라고 부르거나 변경하려면 아래 코드를 수정해야 합니다.플러그인 폴더에 저장합니다. 하위 폴더로 이동하려면 아래 경로를 변경하십시오.
아래 코드를 함수에 입력합니다. 이미지 위치를 직렬화된 URL로 저장하고 코드를 수정하여 "_dll"이라는 필드를 다시 변경합니다.
아래에 오류가 있을 수 있습니다. Oop 형식으로 가지고 있었으니 문제가 있으면 알려주십시오. php 오류가 있으면 php 오류를 기록하십시오. php 오류가 없지만 전송이 되면 크롬이나 파이어폭스의 콘솔을 확인하십시오.디버깅할 수 없습니다.
당신의 기능으로 php.
function add_image_meta_box() {
add_meta_box(
'multi_image_upload_meta_box'
, __('Upload Multiple Images', 'miu_textdomain')
, 'render_meta_box_content'
, $post_type
, 'advanced'
, 'high'
);
}
add_action( 'add_meta_boxes', 'add_image_meta_box' );
function render_meta_box_content($post) {
wp_nonce_field('miu_inner_custom_box', 'miu_inner_custom_box_nonce');
$value = get_post_meta($post->ID, '_images', true); // <-- change field if wanted, there is 1 more below that will need the same name
$metabox_content = '<div id="miu_images"></div><input type="button" onClick="addRow()" value="Add Image" class="button" />';
echo $metabox_content;
$images = unserialize($value); //<--- when using the images use this!!
$script = "<script>
itemsCount= 0;";
if (!empty($images))
{
foreach ($images as $image)
{
$script.="addRow('{$image}');";
}
}
$script .="</script>";
echo $script;
}
function save_image($post_id){
if (!isset($_POST['miu_inner_custom_box_nonce']))
return $post_id;
$nonce = $_POST['miu_inner_custom_box_nonce'];
if (!wp_verify_nonce($nonce, 'miu_inner_custom_box'))
return $post_id;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
return $post_id;
if ('page' == $_POST['post_type']) {
if (!current_user_can('edit_page', $post_id))
return $post_id;
} else {
if (!current_user_can('edit_post', $post_id))
return $post_id;
}
$posted_images = $_POST['miu_images'];
$miu_images = array();
foreach ($posted_images as $image_url) {
if(!empty ($image_url))
$miu_images[] = esc_url_raw($image_url);
}
update_post_meta($post_id, '_images', serialize($miu_images));<--if you changed this above.......make sure they match
}
add_action( 'save_post', 'save_image' );
function enqueue_scripts($hook){
if ('post.php' != $hook && 'post-edit.php' != $hook && 'post-new.php' != $hook)
return;
wp_enqueue_script('miu_script', plugin_dir_url(__FILE__) . 'miu_script.js', array('jquery')); //<--this is the path!!! change if wanted (prob a good idea to add to js folder)
}
add_action('admin_enqueue_scripts', 'enqueue_scripts');
단순한 해결책
function my_add_attachment_location_field( $form_fields, $post ) {
$field_value = get_post_meta( $post->ID, 'location', true );
$default = get_post_meta( $_REQUEST['post_id'] , 'location', true ) ? get_post_meta( $_REQUEST['post_id'] , 'location', true ): "Location Not Yet Set";
$form_fields['location'] = array(
'value' => $field_value ? $field_value : $default,
'label' => __( 'Location' ),
'helps' => __( 'Set a location for this attachment' )
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'my_add_attachment_location_field', 10, 2 );
내 플러그인으로 잘 작동합니다.
$_REQUEST['post_id']는 실제 WP 포스트 ID이며 get_post_meta를 사용하면 메타박스 위치를 얻을 수 있습니다.:)
제가 그냥 추측하는 것인지 모르겠습니다.이 기능을 사용할 수 있습니다.
wp_reset_query();
global $post;
$post->ID // retrive the global $post id;
언급URL : https://stackoverflow.com/questions/22850878/wordpress-get-post-meta-from-callback-function
'programing' 카테고리의 다른 글
C#의 XLSX에서 데이터 읽기 (0) | 2023.07.10 |
---|---|
스프링 부트에 스프링 컨버터를 프로그래밍 방식으로 등록 (0) | 2023.07.10 |
[표시]를 사용하여 표시하는 방법자동 완성 재료2의 경우 (0) | 2023.07.10 |
data.목록에 대한 행 프레임 (0) | 2023.07.10 |
도커화된 몽고의 데이터 초기화 (0) | 2023.07.10 |