时间:2021-07-01 10:21:17 帮助过:2人阅读
开发一个主题,首页有一个幻灯片展示,#1、#2、#3 三张。
发布文章的时候,需要有一个勾选选项,勾选1、2或者3,会在首页的相应幻灯片显示;勾选4(默认)则不会显示。
尝试过wordpress的自定义字段(Custom Fields)但是好像不能实现,求提供思路和解决办法。
__('Use as slide'),
'desc' => 'Check this box and make the post a slider',
'id' => 'sola-post-slider',
'type' => 'checkbox',
'default' => ''
)
);
/* Meta box setup function. */
function sola_post_meta_boxes_setup() {
/* Add meta boxes on the 'add_meta_boxes' hook. */
add_action( 'add_meta_boxes', 'sola_add_post_meta_boxes' );
add_action( 'save_post', 'sola_save_post_meta_boxes', 10, 2 );
}
/* Create one or more meta boxes to be displayed on the post editor screen. */
/* 这里也需要改一下,设置需要创建的Post Meta Box叫什么名字,显示在什么位置 */
function sola_add_post_meta_boxes() {
add_meta_box(
'sola-post-slider-class', // Unique ID
__('Slideshow'), // Title
'sola_seo_box_format', // Callback function
'post', // Admin page (or post type)
'side', // Context
'default' // Priority
);
}
function sola_seo_box_format(){
global $fields,$post;
// Use nonce for verification
echo '';
echo '';
foreach ($fields as $field) {
// get current post meta data
$meta = get_post_meta($post->ID, $field['id'], true);
echo ''.
' '.
'';
switch ($field['type']) {
case 'text':
echo ''. '
'. $field['desc'];
break;
case 'textarea':
echo ' ';
}
echo '
';
}
function sola_save_post_meta_boxes($post_id) {
global $fields, $post;
//Verify nonce
if (!wp_verify_nonce($_POST['sola_meta_box_nonce'], basename(__FILE__))) {
return $post_id;
}
//Check autosave
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return $post_id;
}
//Get the post type object.
$post_type = get_post_type_object( $post->post_type );
//Check permissions
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
return $post_id;
foreach ($fields as $field) {
$old = get_post_meta($post_id, $field['id'], true);
$new = $_POST[$field['id']];
if ($new && $new != $old) {
update_post_meta($post_id, $field['id'], $new);
} elseif ('' == $new && $old) {
delete_post_meta($post_id, $field['id'], $old);
}
}
}
?>
这段代码会在文章创建和编辑页面创建如下所示的Post Meta Box,如下图
读取幻灯片文章
接下来修改slider.php,过去只需要查询custom post type,现在使用post meta box实现,就需要根据post的meta信息搜索幻灯片,代码如下
$args = array(
'meta_query' => array(
array(
'key' => 'sola-post-slider',
'value' => 'on',
)
)
);
$slides = get_posts($args);
用get_posts()和meta_query参数结合,就可以达到目的,有了数据,直接循环输出就行了