問題描述
我正在嘗試創建一個插件來改變 「添加新帖」 頁面,因此可見性字段默認為”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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。