我已經使用這些組合功能,在我的功能.php文件,爲表格中的每個媒體項目添加媒體庫中的鏈接(admin區域中的upload.php),以將該項目附加/重新附加到任何內容。
// Functions to allow one to re-attach an image to a post
function upload_columns($columns) {
// Unset($columns['parent']);
$columns['better_parent'] = 'Re-Attach';
return $columns;
}
add_filter('manage_upload_columns', 'upload_columns');
function media_custom_columns($column_name, $id) {
$post = get_post($id);
if($column_name != 'better_parent')
return;
if($post->post_parent > 0) {
if(get_post($post->post_parent)) {
$title = _draft_or_post_title($post->post_parent);
}
?>
<strong><a href="<?php echo get_edit_post_link($post->post_parent); ?>"><?php echo $title ?></a></strong>, <?php echo get_the_time(__('Y/m/d')); ?>
<br />
<a class="hide-if-no-js" onclick="findPosts.open('media[]', '<?php echo $post->ID ?>');return false;" href="#the-list"><?php _e('Re-Attach'); ?></a>
<?php
}else {
?>
<?php _e('(Unattached)'); ?><br />
<a class="hide-if-no-js" onclick="findPosts.open('media[]', '<?php echo $post->ID ?>');return false;" href="#the-list"><?php _e('Attach'); ?></a>
<?php
}
}
add_action('manage_media_custom_column', 'media_custom_columns', 10, 2);
我知道這不會在您描述的位置放置選項,但它是一個正確方向的開始。
UPDATE:
請注意,我將離開,以防有人在上面的代碼要在他們的庫表中的重新連接選項。
至於你的問題...這裏是代碼,解釋如下:
function my_post_submitbox_misc_actions($id) {
global $pagenow, $typenow;
// We only want to run the code on a specific page
if($pagenow != 'post.php' || $typenow != 'attachment') {
return;
}
$post = get_post($id);
if($post->post_parent > 0) {
if(get_post($post->post_parent)) {
$title = _draft_or_post_title($post->post_parent);
}
?>
<div class="misc-pub-section misc-pub-attachment">
Attached to: <strong><a href="<?php echo get_edit_post_link($post->post_parent); ?>"><?php echo $title ?></a></strong>
(<a class="hide-if-no-js" onclick="findPosts.open('action','find_posts');return false;" href="#"><?php _e('Re-Attach'); ?></a>)
</div>
<?php
} else {
_e('(Unattached)'); ?><br />
<a class="hide-if-no-js" onclick="findPosts.open('action','find_posts');return false;" href="#"><?php _e('Attach'); ?></a>
<?php
}
}
add_action('attachment_submitbox_misc_actions', 'my_post_submitbox_misc_actions');
// Function to call the find_posts_div pop up OUTSIDE the post form
function my_post_submitbox_misc_form() {
global $pagenow, $typenow;
// We only want to run the code on a specific page
if($pagenow != 'post.php' || $typenow != 'attachment') {
return;
}
// Enqueue our scripts
wp_enqueue_style('thickbox');
wp_enqueue_script('thickbox'); // needed for find posts div
wp_enqueue_script('media');
wp_enqueue_script('wp-ajax-response');
?>
<form name="plugin_form" id="plugin_form" method="post" action="/wp-content/themes/<?php echo get_template() . '/test.php'; ?>">
<?php
wp_nonce_field('plugin_nonce');
find_posts_div();
?>
</form>
<?php
}
add_filter('admin_footer','my_post_submitbox_misc_form');
擊穿
第一個功能是非常相似,你已經在你的代碼之上。我相信我所做的唯一更改是添加檢查以確保我們只在編輯附件頁上運行此代碼。您可能需要調整它,但我並未完全測試。
我也改變了我們稱之爲findPosts.open()
的方式。我們現在傳遞一個名爲'action'的變量,並將其值設置爲'find_posts',以便稍後檢查它...
因此,第一個函數只顯示附件已附加到的帖子, - 如果需要,指定它...或顯示一個選項來附加它。重新附加和附加鏈接只是點擊時,啓動findPosts.open()
,它尋找頁面上隱藏的div /輸入...我們還沒有創建這些。
第二個功能是關鍵......首先,你需要排隊腳本和一個風格。這裏輸入的代碼是find_posts_div()
調用。這就是讓魔法發生的原因,但所有這些都是在彈出窗口中創建隱藏的div和表單域,只是等待被調用(我們在第一個函數中的錨點)。這需要在一個單獨的函數中,以便我們可以使用add_filter來調用表單外部的函數。
起初我試圖把它全部集中在一個功能中。瀏覽器會去掉我們的<form>
標籤,因爲我們試圖將表單放在另一個表單(帖子表單)中,這是一個不行。因此,通過在admin_footer中調用它,我們將代碼加載到表單之外。
在表單中包裝find_posts_div()
使我們能夠提交表單,我們希望在以往任何時候的結果,做任何我們想做的事情。在我們的例子中,我們創建一個新頁面(test.php)並在那裏提交結果,這樣我們就可以做我們需要的。
到目前爲止,test.php的頁面如下:
<?php
echo '<pre>';print_r($_POST);echo '</pre>';
die();
?>
這將顯示的$ _ POST所有值...隨意添加更多的隱藏價值並沒有什麼,但' found_post_id'值是從彈出的選定值中獲得的帖子ID。然後你可以查看upload.php的第103 - 141行來找到代碼來做實際的重新連接。可能有鉤子或更好的東西,但我沒有時間看。
希望這會有所幫助!
沒問題...很高興它解決了!附:在您的解決方案中,您將調用spd_submitbox_misc_actions和spd_post_submitbox_misc_form兩次。更新您的代碼以刪除重複的功能,以便其他人不會感到困惑。 – 2014-10-10 15:33:17