我创建了一个自定义帖子类型(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页面上查看“关于”页面,我如何在“关于”页面(前端)上显示该信息
非常感谢您的帮助。
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