问题描述
我正在尝试创建一个插件来改变 「添加新帖」 页面,因此可见性字段默认为”Private”:
Status: Draft
Visibility: **Private**
Publish immediately
[Publish]
… 而不是 WordPress 通常假设的:
Status: Draft
Visibility: **Public**
Publish immediately
[Publish]
目前,我正在使用”wp_insert_post_data” 过滤器,这样可以让我将”auto-draft” 的 post_status 的任何帖子更改为”private” 。虽然这样做,但是有一个意想不到的 side-effect:将 post_status 更改为”private” 似乎自动发布该信息,将编辑器中的按钮更改为”Update” 。此外,如果用户在指定标题之前保存,则该帖子将以标题”Auto-Draft” 发布。
有没有什么办法,我可以简单地改变可见性私人默认情况下,以不 auto-publish 的方式,并将按钮更改为”Update”?在香草 WordPress 中,用户可以手动将可见性更改为 「私人」,按钮仍然保留为 「发布」… 我只需要通过一个插件实现。我也想确保”public” 仍然可以由用户选择,他们是否愿意。
谢谢!
最佳解决方案
因为你正在开发一个 plug-in,我假设你不想触摸 wp-content /plugins 或../themes 之外的任何文件。
但是,如果不是这样,请按照以下步骤操作:去 wp-admin /includes /meta-boxes.php 找到:
$visibility = 'public';
$visibility_trans = __('Public');
现在改为明显:
$visibility = 'private';
$visibility_trans = __('Private');
再次,这会影响在插件文件夹之外的 meta-boxes.php 文件。尽管如此,我认为您应该采取的方法是创建一个新的元框,添加您的自定义可见性设置 (即私有),并使后者覆盖默认的 WP 可见性设置。
最好的,克里斯
次佳解决方案
从插件; 使用动作’post_submitbox_misc_actions’ 和一些查询来捕获用户发布形式:http://wordpress.org/extend/plugins/private-post-by-default/
function default_post_visibility(){
global $post;
if ( 'publish' == $post->post_status ) {
$visibility = 'public';
$visibility_trans = __('Public');
} elseif ( !empty( $post->post_password ) ) {
$visibility = 'password';
$visibility_trans = __('Password protected');
} elseif ( $post_type == 'post' && is_sticky( $post->ID ) ) {
$visibility = 'public';
$visibility_trans = __('Public, Sticky');
} else {
$post->post_password = '';
$visibility = 'private';
$visibility_trans = __('Private');
} ?>
<script type="text/javascript">
(function($){
try {
$('#post-visibility-display').text('<?php echo $visibility_trans; ?>');
$('#hidden-post-visibility').val('<?php echo $visibility; ?>');
$('#visibility-radio-<?php echo $visibility; ?>').attr('checked', true);
} catch(err){}
}) (jQuery);
</script>
<?php
}
add_action( 'post_submitbox_misc_actions' , 'default_post_visibility' );
?>
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。