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