Filter a pluggable function

时间:2013-10-09 作者:Turbodurso

以下函数可插入,因为它包含筛选器:

// Make function pluggable/overwritable
if ( ! function_exists( \'wpsight_layout_images\' ) ) {

    function wpsight_layout_images() {

        $layout_images = array(
            \'show_on_single\'         => true,
            \'size_archive\'           => \'post-thumbnail\',
            \'align_archive\'          => \'left\',
            \'size_single\'            => \'post-thumbnail\',
            \'align_single\'           => \'left\',
            \'size_widget\'            => \'post-thumbnail\',
            \'align_widget\'           => \'left\',
            \'size_archive_listings\'  => \'post-thumbnail\',
            \'align_archive_listings\' => \'right\',
        );

        return apply_filters( \'wpsight_layout_images\', $layout_images );

    }

}
我的问题如下。假设我需要更改最后两个变量的值size_archive_listingsalign_archive_listings 使用过滤器。我是否必须复制整个函数,或者某些变量是否可以独立更改?什么是正确的使用add_filter 在这种情况下,是否从子主题函数文件?

2 个回复
SO网友:helgatheviking

正如Milo在评论中提到的那样,该函数是可插入的,因为它被包装在function_exists() 包装器。要单独更改设置,可以利用过滤器。

function wpa_117251( $layout_images ){
  $layout_images[\'size_archive_listings\'] = \'medium\';
  $layout_images[\'align_archive_listings\'] = \'left\';
  return $layout_images;
}
add_filter( \'wpsight_layout_images\', \'wpa_117251\' );

SO网友:Chip Bennett

正如@Milo的评论所指出的,一个“可插入”的函数与它的可过滤性是完全不同的。由于if ( function_exists() ) 包装它的条件。如果插件的输出是通过apply_filters() 呼叫

由于您只想更改返回数组中的几个值,因此您需要添加一个过滤器,而不是插入整个函数。

只需在子主题函数文件中添加以下内容:

function wpse117251_wpsight_layout_images( $layout_images ) {
    // Modify array values
    $layout_images[\'size_archive_listings\'] = \'your-string-here\';
    $layout_images[\'align_archive_listings\'] = \'your-string-here\';
    // Return the array
    return $layout_images;
}
add_filter( \'wpsight_layout_images\', \'wpse117251_wpsight_layout_images\' );

结束

相关推荐

当插件在Pluggable.php之前加载时,如何在插件中调用wp_get_Current_User()?

当前的结果是“PHP致命错误:调用未定义的函数wp\\u get\\u current\\u user()”,这很有意义,但没有帮助。我需要使用$current\\u user。以下是我当前使用的代码:$wp->init(); do_action( \'init\' ); // Check site status $file=\'http://xxxxxxxx.com/wp-admin/wp_includes/pluggable.php\'; if ( is_multi