Giới hạn widget vào thanh bên nhất định?


7

Tôi có nhiều "sidebars", nhưng không phải tất cả chúng đều có cùng kích thước. Không phải tất cả các tiện ích đều phù hợp với tất cả các thanh bên (ví dụ: tôi có "thanh bên chân trang" nơi khách hàng có thể đặt các tiện ích tùy chỉnh, nhưng chúng rộng và hoàn toàn không khớp với thanh bên "thực"). Tôi muốn đưa ra một dấu hiệu khi một widget được đặt trong một thanh bên mà nó không thuộc về (ví dụ thay đổi màu văn bản tiêu đề). cách nào tốt nhất để làm việc này?

Câu trả lời:


4

Có một hook widget_display_callback, bạn có thể sử dụng để ghi đè widget dựa trên thanh bên và widget (trả về false khi không phù hợp):

http://core.trac.wordpress.org/browser/trunk/wp-includes/widgets.php?rev=15590#L180


Nhưng điều này chỉ ẩn thanh bên khi bạn hiển thị nó ở mặt trước? Hay nó cũng ảnh hưởng đến khu vực quản trị?
Jan Fabry

1
Nó chỉ giấu nó ở mặt trước mà thôi. Sau đó, bạn có thể sử dụng nó để lặp lại một cách có điều kiện một cái gì đó như "Xin lỗi, thanh bên sai. Vui lòng đặt tiện ích này ở nơi khác." và sau đó trả lại sai để bảo lãnh. Không có bất kỳ hook nào để làm tương tự trong khu vực quản trị. Tôi đã cố gắng nói chuyện Andrew thực hiện chức năng tương tự cho màn hình widget, nhưng anh ấy kiên quyết rằng tôi nên sử dụng CSS và JS để thao tác DOM thay thế. (Tôi cần công cụ này cho plugin bối cảnh tiện ích của tôi, không liên quan trong một số thanh bên.)
Denis de Bernardy

3

Tôi đã giải quyết nó bằng cách sử dụng một số CSS, tương tự như mẹo của tôi để làm nổi bật các widget của riêng tôi . Các khu vực thả thanh bên là divcủa lớp widgets-sortablevà chúng có idthanh bên của bạn. Các vật dụng của bạn là divvới lớp widgetvà và idcó dạng widget-[global_counter]_[widget_key]-[widget_id]. Bạn có thể kết hợp những thứ này để làm nổi bật các kết hợp đúng hoặc sai.

Ví dụ, tôi có một thanh bên được gọi footerchỉ nên chứa các widget rộng. Những vật dụng này có thể nhận ra được vì ID của chúng bao gồm -wide-. Tôi muốn những thứ này có màu xanh lá cây, và tất cả những cái khác có màu đỏ với một cú đánh xuyên qua.

add_action('admin_print_styles-widgets.php', 'print_widget_hint_style');
function print_widget_hint_style()
{
    echo <<<EOF
<style type="text/css">
/* Less specific rule for all widgets */
div.widgets-sortables[id*=-footer] div.widget .widget-title
{
    color: red;
    text-decoration: line-through;
}

/* More specific rule for correct widgets */
div.widgets-sortables[id*=-footer] div.widget[id*=-wide-] .widget-title
{
    color: green;
}
</style>
EOF;
}

0

Có lẽ tôi sẽ xác định các khu vực tiện ích của riêng mình để nhận bất kỳ tiện ích nào được đưa vào khu vực quản trị và chỉ đặt khu vực tiện ích đó ở một vị trí cụ thể trong chủ đề.


Tôi làm điều đó và tôi có các khu vực widget được gọi là "footer" và "sidebar" mà tôi sử dụng ở vị trí cụ thể trong các mẫu. Nhưng chân trang rộng hơn nhiều so với thanh bên, vì vậy các vật dụng được tạo cho chân trang không vừa với thanh bên. Đó là lý do tại sao tôi muốn có một chỉ dẫn khi bạn thả một widget "rộng" trong khu vực widget "nhỏ". Hoặc có điều gì tôi đang thiếu trong câu trả lời của bạn?
Jan Fabry

Không, không bỏ lỡ bất cứ điều gì. Đề nghị tiếp theo của tôi, mặc dù sẽ tốn nhiều công sức hơn một chút, là tạo các vật dụng của riêng bạn để sử dụng tại vị trí cụ thể của bạn. Tất cả những cái được xác định trước sẽ có trong các tập tin cốt lõi. Bằng cách đó bạn có thể kiểm soát chiều rộng của chúng và không có gì.
tw2113
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.