เมื่อแทรกสื่อลงในโพสต์มีวิธีการเปลี่ยนมุมมองเริ่มต้นของไลบรารีสื่อจาก "รายการสื่อทั้งหมด" เป็น "อัปโหลดไปยังโพสต์นี้" หรือไม่
มีเธรดอื่นที่ดึงคำถามนี้มาจาก: วิธีจัดการความสัมพันธ์ของไฟล์แนบ
เมื่อแทรกสื่อลงในโพสต์มีวิธีการเปลี่ยนมุมมองเริ่มต้นของไลบรารีสื่อจาก "รายการสื่อทั้งหมด" เป็น "อัปโหลดไปยังโพสต์นี้" หรือไม่
มีเธรดอื่นที่ดึงคำถามนี้มาจาก: วิธีจัดการความสัมพันธ์ของไฟล์แนบ
คำตอบ:
คำตอบก่อนหน้าของฉันมีข้อผิดพลาดเล็กน้อยสองข้อ:
change
เหตุการณ์สำหรับผู้ปกครองนี่คือรหัสคงที่:
<?php
/**
* Plugin Name: Pre-select post specific attachments
*/
add_action( 'admin_footer-post-new.php', 'wpse_76048_script' );
add_action( 'admin_footer-post.php', 'wpse_76048_script' );
function wpse_76048_script()
{
?>
<script>
jQuery(function($) {
var called = 0;
$('#wpcontent').ajaxStop(function() {
if ( 0 == called ) {
$('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
called = 1;
}
});
});
</script>
<?php
}
Add Media
ปุ่ม Set featured image
แต่ไม่เมื่อคุณคลิก มีวิธีให้ทำงานที่นั่นด้วยหรือไม่
wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});
จะเหมาะสมกว่า
ปัญหาเดียวกับ JS ด้านบนที่มันสลับกล่องเลือกเพื่อทริกเกอร์การเปลี่ยนแปลงหลังจากที่โหลดหน้าเว็บและหลังจากนั้นก็เริ่มที่จะดาวน์โหลดรายการสื่อทั้งหมด สำหรับลูกค้าของฉันบน T1 ที่ช้าสิ่งนี้ถูกล็อกไว้เนื่องจากมันดาวน์โหลดทั้งสื่อทั้งหมดและอัปโหลดไปยังรายการโพสต์นี้ด้วยกัน
ฉันได้รับความช่วยเหลือจาก Sewpafly ที่ยอดเยี่ยมที่พัฒนาปลั๊กอินตัวแก้ไขโพสต์รูปย่อ เขาแบ่งปัน JS ชิ้นส่วนที่ยอดเยี่ยมซึ่งป้องกันการโหลดของรายการสื่อทั้งหมดและบังคับให้โหลดเฉพาะภาพ "อัปโหลดไปยังโพสต์นี้" โดยค่าเริ่มต้น
ไฟล์: myadmin.js
jQuery(function($) {
var called = 0;
$('#wpcontent').ajaxStop(function() {
if ( 0 == called ) {
$('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
called = 1;
}
});
var oldPost = wp.media.view.MediaFrame.Post;
wp.media.view.MediaFrame.Post = oldPost.extend({
initialize: function() {
oldPost.prototype.initialize.apply( this, arguments );
this.states.get('insert').get('library').props.set('uploadedTo', wp.media.view.settings.post.id);
}
});
});
ไฟล์: functions.php
add_action('admin_enqueue_scripts', 'add_admin_js');
function add_admin_js() {
wp_enqueue_script('admin_js', get_bloginfo( 'template_directory' ) . '/js/admin.js');
}
รหัสเดียวกันบน GitHub: https://gist.github.com/fishnyc22/5593693
ฉันปล่อยมันลงในไฟล์ JS และเรียกมันใน functions.php ด้วย admin_enqueue_scripts ดู GIST ด้านบนสำหรับทั้ง PHP และ JS
ทำงานได้ยอดเยี่ยม หวังว่าผู้ใช้เวิร์ดเพรสที่ดีจะแก้ไขปัญหานี้ในการอัปเดตที่กำลังจะมา แต่สำหรับตอนนี้Sewpaflyมีทางออกที่ดีที่สุดที่ฉันเคยพบ ขอบคุณเพื่อนอีกครั้ง
ฉันควรทราบว่าฉันเพิ่งค้นพบว่าค่าเริ่มต้นของผู้ดูเป็นภาพขนาดปานกลางซึ่งฉันได้ปิดการใช้งาน (ตั้งค่าเป็น 0,0) เนื่องจากฉันไม่ได้ใช้และป้องกันการขยายตัว เมื่อขนาดกลางไม่พร้อมใช้งาน wordpress โหลดภาพขนาดเต็ม ฉันได้รับตั้งแต่เปิดใช้งานในขนาดกลาง
@toscho Ah ฉันพบข้อผิดพลาดในรหัสของคุณ โปรดเปลือยกับฉัน ทำตามขั้นตอนต่อไปนี้เพื่อจำลองปัญหา:
1) เปิดโพสต์ฉบับร่าง
2) คลิกที่Add Media
ปุ่ม รอโหลดฟังก์ชัน jQuery
3) ทางด้านซ้ายของคุณคลิกที่Set Featured Image
ลิงค์
4) ตอนนี้ปิดหน้าต่างป๊อปอัพสื่อและในหน้าแก้ไขการโพสต์คลิกที่Set featured image
ลิงค์บนแถบด้านขวา
5) คุณจะเห็นว่าฟังก์ชั่น jQuery ไม่ทำงาน
อย่างไรก็ตามหากคุณจะคลิกที่Set featured image
ลิงก์ก่อนในการโหลดการแก้ไขโพสต์ฟังก์ชันจะทำงาน คุณสามารถทำซ้ำปัญหานี้และหาวิธีแก้ไขได้หรือไม่? ขออภัยอีกครั้งสำหรับการโพสต์สิ่งนี้เป็นคำตอบ แต่แพลตฟอร์มนี้ไม่ได้เสนอตัวเลือกที่ดีกว่าให้ฉันในขณะนี้
แก้ไข: ใครก็ได้โปรดให้toschoทราบเกี่ยวกับเรื่องนี้ คุณสามารถทำได้โดยการเพิ่มความคิดเห็นในคำตอบของเขาซึ่งฉันเชื่อว่าควรแจ้งให้เขาทราบ ฉันไม่สามารถเขียนความคิดเห็นเนื่องจากฉันมีชื่อเสียงไม่พอ ...
แก้ไข 2 : หากคุณต้องการหลีกเลี่ยงปัญหานี้คุณสามารถลบลิงค์ "Set Featured Image" ในป๊อปอัพและบังคับให้ผู้ใช้ใช้ลิงค์ด้านข้าง (เช่นรุ่น WP ก่อนหน้า 3.5) ใช้ตัวกรองนี้ที่นำมาใช้ใน WP 3.5:
add_filter( 'media_view_strings', 'cor_media_view_strings' );
/**
* @see wp-includes|media.php
*/
function cor_media_view_strings( $strings ) {
unset( $strings['setFeaturedImageTitle'] );
return $strings;
}
ดังที่ฉันได้กล่าวมานี่เป็นการแก้ไขที่สิ้นหวังจนกว่าจะมีวิธีแก้ไขปัญหาสำหรับรหัสหลัก
สิ่งสำคัญที่ฉันไม่ชอบเกี่ยวกับการแก้ปัญหาเหล่านี้ส่วนใหญ่ก็คือมันกระพริบบนหน้าจอจำนวนมากและหากคุณคลิกที่ภาพที่แนะนำมันจะเปลี่ยนกลับไปแสดงภาพทั้งหมด หลังจากการค้นหาบางอย่างฉันคิดว่าพบวิธีแก้ปัญหาอย่างถาวร (ขอบคุณÜnsal Korkmaz ) ซึ่งดูเหมือนว่าจะช่วยแก้ปัญหาเหล่านี้ได้ รหัส:
add_action( 'admin_footer-post-new.php', 'media_library_filter' );
add_action( 'admin_footer-post.php', 'media_library_filter' );
function media_library_filter() {
?>
<script type="text/javascript">
jQuery(document).on("DOMNodeInserted", function(){
jQuery('select.attachment-filters [value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
});
</script>
<?php
}
ซึ่งตั้งค่าไลบรารีสื่ออย่างถาวรให้แสดงเฉพาะ "อัปโหลดไปยังโพสต์นี้" แม้ว่าคุณจะลองและเปลี่ยนมุมมองซึ่งหมายความว่าไม่มีการกระพริบ
ฉันได้เพิ่มรหัสนี้เพื่อประกอบมันเพื่อลบ selectbox ทั้งหมด:
add_action( 'admin_head', 'hide_select_ddl' );
function hide_select_ddl()
{
?>
<style type="text/css">
div.media-menu a.media-menu-item:nth-child(3) {display:none!important;}
.media-frame-content .attachment-filters:first-child {
display:none;
}
</style>
<?php
}
เวิร์ดเพรสเวอร์ชันใหม่ใช้แนวทางที่แตกต่าง ( Backbonejsขั้นสูง) สำหรับผู้อัปโหลดสื่อ ตรวจสอบรหัสจากปลั๊กอินนี้ตามที่ใช้กับเวิร์ดเพรสรุ่นใหม่
นี่เป็นคำตอบของฉันที่จะตั้งค่าdateFilter
เป็นเดือนปัจจุบันแม้ว่ามันจะทริกเกอร์ AJAX สองครั้ง
.on('content:render:browse', function(a, b) {
var filter = a.toolbar.secondary.get('dateFilter');
if (filter.model) {
filter.model.set(filter.filters[1].props);
}
})