图库设置更改可用列

时间:2013-01-20 作者:eugene.kud

是否有一个过滤器挂钩可以更改gallery settings屏幕中可用列的数量。我说的是:

<label class="setting">
    <span><?php _e(\'Columns\'); ?></span>
    <select class="columns" name="columns"
        data-setting="columns">
        <?php for ( $i = 1; $i <= 9; $i++ ) : ?>
            <option value="<?php echo esc_attr( $i ); ?>" <?php selected( $i, 3 ); ?>>
                <?php echo esc_html( $i ); ?>
            </option>
        <?php endfor; ?>
    </select>
</label>
在中wp-includes/media-template.php 线359-369 (《Wordpress 3.5版》)

What I basically want to do is to change $i <= 9; to $i <= 5; in loop exit condition.

我想如果我这样做的话,它将在下一次Wordpress更新中被丢弃。

谢谢你的帮助

尤金

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

简而言之,事情有时很简单:不,这是不可能的。整个部分都是硬编码的。

长答案(不建议这样做)

您可以跳入esc_htmlattribute_escape 过滤器并在那里返回空*),但由于这些是非常通用的名称,可能还会干扰其他过滤器结果,因此会破坏其他内容。

<?php
/* Plugin Name: (#82379) Empty Media options */
add_filter( \'image_size_names_choose\', \'wpse82379_esc_attr\' );
function wpse82379_trigger_filter( $sizes )
{
    if ( \'post\' !== get_current_screen()->post )
        return $safe_text;

    add_filter( \'attribute_escape\', \'wpse82379_esc_attr\', 10, 2 );
    add_filter( \'esc_html\', \'wpse82379_esc_attr\', 10, 2 );

    return $sizes;
}
function wpse82379_esc_attr( $safe_text, $text )
{
    if ( ! in_array( absint( $text ), range( 6, 9 ) ) )
        return $safe_text;

    static $counter = 0;
    $static++;

    // 
    if ( 1 === $static )
    {
        ob_start();
        return $safe_text;
    }
    if ( in_array( $static, array( 7, 9 ) ) )
    {
        remove_filter( current_filter(), __FUNCTION__ );
        if ( \'esc_html\' === current_filter() )
        {
            $html = ob_get_contents();
            ob_end_clean();
            // In case you want to alter the layout, rework $html and return it
            return \'\';
        }
    }

    return $safe_text;
}
由于escape过滤器几乎无处不在,因此不建议在生产中使用它们(如gettext过滤器)。它们会在每次逃逸时触发(每页数百次),并且会真正降低系统的速度。

为了解决这个问题,我使用了在HTML脚本输出之前最后运行的过滤器,以尽可能晚地添加回调。然后,我会尽可能频繁地中止,以不触发除“添加新内容”屏幕之外的任何其他页面上的插件过滤器。在检查了源文件HTML之后,我可以看到,对于版本3.5,我们只有两个调用esc_attr_e()(内部触发esc_attr 因此,我们的过滤器),但有两个字符串,所以我们可以安全地中止这些。当我们最终到达过滤器时,我返回一个空字符串,然后立即删除过滤器,以不触发以后的任何调用。

这是你能做到的最好的。

考虑到这一点后,我使用了ob缓存-虽然不漂亮,但它应该可以工作(除非我计算错了)。注意:这是在写作和思考时编写的,因此不需要测试。你必须确认它是否有效。

最后注意:您必须在每个后续版本(从WP v3.6开始)后重新检查此插件,以确保标记没有更改,并且仍按预期工作。

*)这将给您留下空字符串。换句话说:它们仍然存在,但不起作用且为空(没有字符串)。

SO网友:nic

可能有也可能没有filter hook, 但您可以限制number of available columns in gallery settings screen 通过使用样式,特别是管理CSS。

要实现1-5列的选择,请将其添加到WordPress管理样式表中。(您可能需要创建一个。)

样式

.gallery-settings .columns option:nth-child(n+6) {
    display: none;
    }
函数告诉WordPress使用wp_enqueue_style 在您的排队PHP文件中。

function wp_admin_styles() {
    wp_enqueue_style(\'admin-styles\', get_template_directory_uri().\'/wordpress-admin.css\');
}
add_action(\'admin_enqueue_scripts\', \'wp_admin_styles\');

enter image description here

注释

如果<select> <option> 标签不存在,无法选择。*在上面的示例中,以第6个孩子开始的所有选项都是目标。请注意,这将仅限于。中的列类。gallery settings类,所以可以很安全地说,这可能不会对其他管理选择选项造成任何问题。

对于我的项目,我只针对第9个选项nth-child(9). 那是因为我在用Zurb Foundation\'s block-grid 可选择1-8列。选择9只会破坏布局。

有了这个样式表,就不必担心更新后会丢失任何东西。

选择将受到限制,但请记住,用户仍然可以使用文本编辑器选项设置列号。[gallery columns="9" ids="113,107,92,57,45,44"] 但如果你很聪明,你可能已经关闭了用户的文本编辑器选项。

结束

相关推荐

Optimize shortcode callbacks

我创建了一个插件,在我的WordPress站点中添加了一些短代码。但我是一个PHP新手,所以我相信它可能有一些错误或优化它的方法。它工作正常,显然没有问题。内存使用率为00.04MB。你能看看吗?非常感谢!add_action( \'wp_enqueue_scripts\', \'prefix_add_my_stylesheet\' ); function prefix_add_my_stylesheet() { // Respects SSL, Styl