WordPress - 无法从自定义帖子类型中的元框获取价值

Posted

技术标签:

【中文标题】WordPress - 无法从自定义帖子类型中的元框获取价值【英文标题】:WordPress - can't get value from metabox in custom post type 【发布时间】:2016-04-03 10:12:11 【问题描述】:

我无法从自定义帖子类型中的元框获取值。

这是我在自定义帖子类型中注册元框的方法:

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 发布帖子时,我看到了所有内容、内容、标题、日期等,但我没有看到任何元数据。

另外,当我这样做时(假设我想从 id 为 37422 的帖子中获取元数据)

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

我得到的值是:string(0) ""

我可能做错了一些负责保存部分的代码,但无法弄清楚到底是什么。

【问题讨论】:

【参考方案1】:

好的,所以我对您的自定义帖子类型做了一些改动,它对我有用。

我创建了一个页面模板来输出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”来检查它是否正常工作。

希望这会有所帮助:)

【讨论】:

以上是关于WordPress - 无法从自定义帖子类型中的元框获取价值的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress - 从自定义帖子类型中删除子菜单

WordPress > 从自定义帖子类型获取自定义分类

Wordpress - 从自定义帖子类型查询第一个和名称

Wordpress 从自定义帖子中删除永久链接但保留存档

用永久链接中的元数据值替换wordpress slug标题

php 从自定义帖子类型中删除Slug