在页面上显示已签入自定义帖子类型的自定义元

时间:2015-11-17 作者:rikardo85

我创建了一个自定义帖子类型(cpt),每个帖子类型中都有一个自定义元字段。

此自定义元字段显示所有可“选中”的页面。

生成自定义元框的代码:

// display list of pages with check box
function page_meta_box( $post ) {

// Nonce to verify intention later
wp_nonce_field( \'save_quote_meta\', \'custom_nonce\' ); 

 // we store data as an array, we need to unserialize it
$checkfield = maybe_unserialize( get_post_meta($post->ID, \'checkfieldBox\', true) );

$pages = get_pages(); 
foreach ( $pages as $page )
{ ?>
    <input id="page_<?php echo $page->ID; ?>" type="checkbox" name="checkfield[]" value="<?php echo $page->ID; ?>"
    <?php if ( in_array($page->ID, $checkfield) ) { ?>checked="checked" <?php } ?>/>
          <label for="page_<?php echo $page->ID; ?>"><?php echo  $page->post_title; ?></label><br>
<?php 
    } 
}
保存自定义元框值的代码:

//save the meta box action
add_action( \'save_post\', \'myplugin_meta_save\', 10, 2 );
//save the meta box
function myplugin_meta_save($post_id, $post)
{

  if ( isset($_POST[\'checkfield\']) ) { // if we get new data
     update_post_meta($post_id, \'checkfieldBox\', $_POST[\'checkfield\'] );
  }
}
我用于在前端显示自定义帖子类型的查询:

<?php $query = new WP_Query( array(
                \'post_type\' => \'sidebar_boxes\',
                \'posts_per_page\' => -1,
                \'orderby\' => \'menu_order\', 
                \'order\' => \'ASC\'
            ) );

    while ( $query->have_posts() ) : $query->the_post(); ?>
        <div class="sidebarBox floatLeft">
            <?php if (has_post_thumbnail())
            { ?>
                    <?php the_post_thumbnail();?>
            <?php
            } ?>
            <div class="sideBoxText">
                <?php // Content here ?>
            </div>
        </div>
<?php 
endwhile;
wp_reset_query(); ?>    
以上代码显示了没有问题的CPT。

我的问题是如何在已选中的页面上显示自定义帖子类型。目前它们都出现了。

E、 g.如果我在仪表板的CPT页面上查看“关于”页面,我如何在“关于”页面(前端)上显示该信息

非常感谢您的帮助。

1 个回复
SO网友:s_ha_dum

你只是想meta_query 基于当前页面的ID:

$query = new WP_Query( 
  array(
    \'post_type\' => \'sidebar_boxes\',
    \'posts_per_page\' => -1,
    \'orderby\' => \'menu_order\', 
    \'order\' => \'ASC\',
    \'meta_query\' => array(
      \'key\' => \'checkfieldBox\',
      \'value\' => $post->ID,
    )
  ) 
);
你真的只能依靠$post 就像我在“单数”页面上所做的那样,只有当$post 对象未被页面上的代码更改。如果您有问题,您需要使用:

$post_obj = get_queried_object();
// now use $post_obj->ID instead of $post->ID

相关推荐

仅为主页显示Metabox

我将尝试使用设置字段将metabox添加到主页,但出现问题,请帮助我。删除时,metabox不会显示在页面编辑器中if statement 它显示在所有页面上。add_action(\'add_meta_boxes\', \'metabox_homepage_videos\'); function metabox_homepage_videos($post) { if (is_front_page()): add_meta_box(\'metabox