2010-11-03 129 views
0

我繼承了一個Wordpress插件,可在編輯頁面和/或帖子時使自定義字段可用。它爲網頁添加了略微不同於內容的內容。該插件決定頁面或交下列要求:確定我是否在Wordpress中編輯頁面或帖子

if(preg_match('|post.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|post-new.php|i', $_SERVER['SCRIPT_NAME'])) { 
     add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'post', 'advanced', 'core'); 
    } elseif(preg_match('|page.php|i', $_SERVER['SCRIPT_NAME']) || preg_match('|page-new.php|i', $_SERVER['SCRIPT_NAME'])) { 
     add_meta_box('qaws_' . $cg ,$group, 'qaws_admin_meta', 'page', 'advanced', 'core'); 
    } 

這在舊版本的WordPress的,因爲他們在URL編輯頁面時,編輯帖子和page.php文件時使用post.php中工作得很好。但是,現在,Wordpress不會這樣做。帖子和頁面都使用如下所示的URL進行編輯:post.php?post=4&action=edit因此URL中唯一可能的標識符是帖子編號。

那麼,如何確定我是否正在編輯頁面或文章?有沒有一個WordPress的功能,可以告訴我這個?是唯一的選擇來抓住郵政編號,並以某種方式檢查它,看看它是什麼?

你會如何處理這個問題?


編輯: 這裏是我做過什麼...... ,而不是做的preg_match我檢索了全球的$ id,用於get_all_page_ids()讓所有的頁面的列表,並匹配$ id來get_all數組中的ID。如果匹配,則執行頁面add_meta_box,如果不是,則執行後一個。

我也移動檢查出一個循環,它是在一個循環中保存了一堆準時渲染頁面。現在我在開始和循環中設置一個標誌,渲染這些meta_boxes只是檢查標誌是否設置。

回答

2

這將是更好地使用get_post_type($ ID)

http://codex.wordpress.org/Function_Reference/get_post_type

+0

感謝您的回覆。這是一個很好的答案!唯一的問題是,如果我正在創建一個新頁面或帖子,那麼我沒有一個頁面或帖子ID來測試。但是,我已經在使用:preg_match('| post_type = page | i',$ _SERVER ['QUERY_STRING'])來處理這個問題,所以我可以使用你在preg match中建議的函數,並且仍然很好。謝謝! – Lothar 2010-11-03 23:58:34

3

函數is_page()是否可用於您的插件?

在這裏看到:http://codex.wordpress.org/Conditional_Tags

+0

不是在管理編輯區。 'is_page()'只在頁面本身顯示時才起作用。我只顯示編輯區域並將該頁面的數據加載到其中。 – Lothar 2010-11-03 09:50:52

+0

我相信is_page在管理端可用,但需要'$ page'參數 - 'is_page(post_id_from_url)'。只需從網址中獲取ID即可。 – Gavin 2010-11-03 14:25:43

+0

如果您好奇,我已將我的解決方案添加到該問題中。 – Lothar 2010-11-03 17:13:27

0

下面是我用:

if(strstr($_SERVER['REQUEST_URI'], 'wp-admin/post-new.php') || strstr($_SERVER['REQUEST_URI'], 'wp-admin/post.php')) { 
    //I'm editing a post, page or custom post type 
}else{ 
    //I'm doing none of the above. 
} 

祝你好運!

1

你可以嘗試使用get_current_screen()函數來檢查,如果你是從後期編輯或頁面,你只需要設置一個條件

$screen = get_current_screen(); 
if($screen->post_type == 'page'){ 
//do something for page screens only 
}elseif($screen->post_type == 'post'){ 
//do something for post screens only. 
} 

讓我知道它是否適合你。

1

in file/wp-admin/includes/screen。PHP 線530 @see set_current_screen()

global $typenow 
$typenow = $this->post_type; 

下面是我用:

if ($typenow == 'post') { 
//do something for post screens only. 
} 

if ($typenow == 'page') { 
//do something for page screens only. 
} 
相關問題