source

WordPress - 사용자 지정 게시물 유형의 메타박스에서 값을 가져올 수 없습니다.

factcode 2023. 9. 16. 09:56
반응형

WordPress - 사용자 지정 게시물 유형의 메타박스에서 값을 가져올 수 없습니다.

사용자 지정 게시물 유형의 메타박스에서 값을 얻는 데 어려움이 있습니다.

사용자 지정 게시물 유형에 메타박스를 등록하는 방법은 다음과 같습니다.

register_post_type( 'poslovi-newsletter',
    array(
         'labels' => array(
         'name' => __( 'Poslovi newsletter' ),
         'hierarchical' => false,
         'singular_name' => __( 'Posalji newsletter' )
        ),
        'public' => true,
        'exclude_from_search' => true,
        'menu_icon' => 'dashicons-email',
        'register_meta_box_cb' => 'add_bez_oznaka_text_metabox'
        )
);

대시보드의 사용자 지정 게시물 유형에 메타박스를 표시하고 데이터를 저장하는 등의 작업을 수행합니다.

function add_bez_oznaka_text_metabox() {
    add_meta_box('poslovi_newsletter_meta', 'Tekst mejla za korisnike bez oznaka', 'bez_oznaka_textarea', 'poslovi-newsletter', 'normal', 'default');   
}
add_action( 'add_meta_boxes', 'add_bez_oznaka_text_metabox' );

function bez_oznaka_textarea( $post ) {
    wp_nonce_field( basename( __FILE__ ), 'poslovi_newsletter_nonce' );
    $poslovi_newsletter_stored_meta = get_post_meta( $post->ID );
    ?>
    <p>
        <label for="meta-textarea" class="poslovi_newsletter-row-title"><?php _e( 'Tekst mejla', 'poslovi_newsletter-textdomain' )?></label> 
        <textarea name="meta-textarea" id="meta-textarea" style="width: 100%; min-height: 200px;"><?php if ( isset ( $poslovi_newsletter_stored_meta['meta-textarea'] ) ) echo $poslovi_newsletter_stored_meta['meta-textarea'][0]; ?></textarea>
    </p>
    <?php
}

function poslovi_newsletter_meta_save( $post_id ) {

    // Checks save status
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ 'poslovi_newsletter_nonce' ] ) && wp_verify_nonce( $_POST[ 'poslovi_newsletter_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';

    // Exits script depending on save status
    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
        return;
    }

    // Checks for input and saves if needed
    if( isset( $_POST[ 'meta-textarea' ] ) ) {
        update_post_meta( $post_id, 'meta-textarea', $_POST[ 'meta-textarea' ] );
    }

}
add_action( 'save_post', 'poslovi_newsletter_meta_save' );

자, 이제 모든 게 잘 됩니다.새로운 게시물을 추가하고 데이터를 입력하면 해당 데이터로 게시물을 저장합니다.예를 들어 var_dump post를 하면 내용, 제목, 날짜 등이 모두 보이는데 메타데이터는 보이지 않습니다.

또한 이렇게 할 때 (아이디 37422로 게시물에서 메타데이터를 받고 싶다고 하자)

$meta_value = get_post_meta( 37422, 'meta-textarea', true );
var_dump($meta_value);

나는 다음의 가치를 얻습니다: string(0)"

제가 부품 저장에 책임이 있는 코드의 일부를 잘못한 것 같은데 정확히 무엇인지 알 수가 없습니다.

네, 고객님의 주문서 타입을 좀 만지작거렸는데 제게 잘 맞습니다.

모든 게시물을 출력할 페이지 템플릿을 만들었습니다.poslovi-newsletter우편 활자php 부분은 다음과 같습니다.

<?php
$args = array(
    'post_type' => 'poslovi-newsletter',
    'posts_per_page'=>-1,
);
$posts = new WP_Query( $args );
$out = '';
if ($posts->have_posts()){
    while ($posts->have_posts()){
        $posts->the_post();

        $meta = get_post_meta($post->ID);

        $out.= '<div class="test">'.$meta['meta-textarea'][0].'</div>';
    }
}
else{
    echo '<p>' . __('No Posts Found.') . '</p>';
}
?>

<?php echo $out;?>

그래서 당신의 포스트 메타 값은 다른 것들 중에서 이름과 함께 핵심적인 것을 가진 배열에 있습니다.meta-textarea, 이 키에서 값은 원하는 값을 가진 단일 키를 가진 배열입니다.

Array (
    [meta-textarea] => Array ( 
                        [0] => Tessst 
                    )
)

'Tessst'를 입력하여 작동하는지 확인했습니다.

도움이 되길 바라요 :)

언급URL : https://stackoverflow.com/questions/34512534/wordpress-cant-get-value-from-metabox-in-custom-post-type

반응형