更改插件内wordpress函数的输出并在wordpress主题中使用它

时间:2019-06-08 17:59:34

标签: php wordpress plugins wordpress-theming

所以...我正在开发一个wordpress插件,它应该更改您从wordpress函数get_the_post_thumbnail_url()获得的图像来源

您有一个主题,并在其中使用get_the_post_thumbnail_url($id)获取了图像源,它返回了类似https://wordpress/path/to/image.jpg的内容,我想在该插件内部更改该函数的输出,例如当我对其进行修改时在我的插件中,您可以在主题中使用该功能,然后输出修改后的版本。

我尝试使用add_filter(),但是它根本不起作用,我也不知道它是否应该起作用。

function my_function_idk( $example ) {
    $asd = $example.'lul123';
    return $asd;
}
add_filter( 'get_the_post_thumbnail_url', 'my_function_idk' );
// expected output: https://wordpress/path/to/image.jpglul123

实际输出:https://wordpress/path/to/image.jpg

也许我理解您必须使用apply_filters()来使该过滤器起作用,但是您需要在THAT THEME中使用它,我不希望这样做。我只想修改该功能...有可能吗?

我只是不了解他们的文档...我对wordpress感到愤怒... fkn bulsht。

1 个答案:

答案 0 :(得分:1)

使用像add_filter( 'get_the_post_thumbnail_url_hook', 'my_function_idk' );这样的钩子。在您想要挂钩的函数内部,需要这样做:

function get_the_post_thumbnail_url( $post = null, $size = 'post-thumbnail' ) {
    $post_thumbnail_id = get_post_thumbnail_id( $post );
    if ( ! $post_thumbnail_id ) {
        return false;
    }
    return  apply_filters('get_the_post_thumbnail_url_hook', $post_thumbnail_id, $size );
}

return apply_filters('get_the_post_thumbnail_url_hook', $post_thumbnail_id, $size );

此函数没有钩子。 Look it inside core。所以你不能“钩”它。

但是您有一个选择:
get_the_post_thumbnail_url内,我们得到wp_get_attachment_image_url,其中有wp_get_attachment_image_src,其功能是return apply_filters( 'wp_get_attachment_image_src', $image, $attachment_id, $size, $icon );

因此您可以通过功能队列连接到链末尾的一个。

尝试: add_filter( 'wp_get_attachment_image_src', 'my_function_idk', 90, 4 );Documentation