关于帖子编辑屏幕,首先要记住的是,所有内容(除了帖子标题、编辑器、永久链接等)都是一个元框。由于您可以轻松添加和删除元框,因此无需对CSS和JS进行黑客攻击。不想显示标准帖子格式?删除默认的元框,并滚动自己的元框。
第一次钩入add_meta_boxes_{$post_type}
并删除旧的格式div,然后添加自己的格式div。
<?php
add_action( \'add_meta_boxes_post\', \'wpse41940_meta_boxes\' );
function wpse41940_meta_boxes( $post )
{
remove_meta_box(
\'formatdiv\',
$post->post_type,
\'side\'
);
add_meta_box(
\'wpse41940_formatdiv\',
_x( \'Format\', \'post format\' ),
\'wpse41940_format_meta_box\',
$post->post_type,
\'side\',
\'core\'
);
}
您可以在中找到默认post格式元框的代码
wp-admin/includes/meta-boxes.php
函数内部
post_format_meta_box
. 这是:
<?php
function post_format_meta_box( $post, $box ) {
if ( current_theme_supports( \'post-formats\' ) && post_type_supports( $post->post_type, \'post-formats\' ) ) :
$post_formats = get_theme_support( \'post-formats\' );
if ( is_array( $post_formats[0] ) ) :
$post_format = get_post_format( $post->ID );
if ( !$post_format )
$post_format = \'0\';
// Add in the current one if it isn\'t there yet, in case the current theme doesn\'t support it
if ( $post_format && !in_array( $post_format, $post_formats[0] ) )
$post_formats[0][] = $post_format;
?>
<div id="post-formats-select">
<input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, \'0\' ); ?> /> <label for="post-format-0"><?php _e(\'Standard\'); ?></label>
<?php foreach ( $post_formats[0] as $format ) : ?>
<br /><input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label>
<?php endforeach; ?><br />
</div>
<?php endif; endif;
}
最简单的方法是复制整个交易,重命名函数并更改我们需要更改的内容。名称,这意味着更改:
$post_format = get_post_format( $post->ID );
if ( !$post_format )
$post_format = \'0\';
将“默认格式”设置为搁置(或任何您想要的格式)。
$post_format = get_post_format( $post->ID );
if ( !$post_format )
$post_format = \'aside\';
我们还需要删除此行:
<input type="radio" name="post_format" class="post-format" id="post-format-0" value="0" <?php checked( $post_format, \'0\' ); ?> /> <label for="post-format-0"><?php _e(\'Standard\'); ?></label>
这是“标准”帖子格式。最终结果:
<?php
function wpse41940_format_meta_box( $post, $box )
{
if ( current_theme_supports( \'post-formats\' ) && post_type_supports( $post->post_type, \'post-formats\' ) ) :
$post_formats = get_theme_support( \'post-formats\' );
if ( is_array( $post_formats[0] ) ) :
$post_format = get_post_format( $post->ID );
if ( !$post_format )
$post_format = \'aside\';
if ( $post_format && !in_array( $post_format, $post_formats[0] ) )
$post_formats[0][] = $post_format;
?>
<div id="post-formats-select">
<?php foreach ( $post_formats[0] as $format ) : ?>
<input type="radio" name="post_format" class="post-format" id="post-format-<?php echo esc_attr( $format ); ?>" value="<?php echo esc_attr( $format ); ?>" <?php checked( $post_format, $format ); ?> /> <label for="post-format-<?php echo esc_attr( $format ); ?>"><?php echo esc_html( get_post_format_string( $format ) ); ?></label><br/>
<?php endforeach; ?><br />
</div>
<?php endif; endif;
}
最后,最好确保
get_post_format
从不返回false,或者在没有格式的情况下也返回默认格式。Post格式只是一种分类法,因此我们可以
get_the_terms
并确保我们始终有一个帖子格式。格式是在向其添加帖子时创建的,因此如果分类法不存在,我们必须添加它。
<?php
add_filter( \'get_the_terms\', \'wpse41940_filter_formats\', 10, 3 );
function wpse41940_filter_formats( $terms, $post_id, $taxonomy )
{
if( \'post_format\' != $taxonomy ) return $terms;
if( empty( $terms ) )
{
$aside = get_term_by( \'slug\', \'post-format-aside\', \'post_format\' );
// post formats are created as posts are saved in them.
// so this is a bit of a hack
if( $aside )
{
$terms[] = $aside;
}
else
{
$term = wp_insert_term( \'post-format-aside\', \'post_format\' );
$terms[] = get_term( $term[\'term_id\'], \'post_format\' );
}
}
return $terms;
}
这些都是
as a plugin.