建立动态动作名称是不是一种糟糕的做法?

时间:2018-08-27 作者:coolpasta

我正在浏览一些帖子来删除它们:

/**
 * Holds deletion errors.
 */
$errors = [];

foreach( $imported_posts as $imported_post ) {
    $post_id = $imported_post->ID;

    /**
     * Actually delete the post.
     */
    $deletion = wp_delete_post( $post_id );

    if( !$deletion || is_null( $deletion ) ) {
        $errors[] = new \\WP_Error(
            \'failed-deleting-post\',
            sprintf(
                esc_html__( \'Post with ID: %s could not be deleted.\' ),
                $post_id
            )
        );
    }

    unset( $post_id );
}
我在想也许我可以允许一个钩子delete error 供人们使用并查看出了什么问题。然后我会这样做:

do_action( \'setup_theme\\after_imported_post_\' . $post_id . \'_delete_failed\' );
但是,想想看,有没有什么方法可以在没有正则表达式和复杂循环的情况下与之挂钩?

另一种更干净的方法是:

do_action( \'setup_theme\\after_imported_post_delete_failed\', $post_id );
我看到一些插件可以做这种动态的事情,但我永远也不知道如何连接到它们。例如,Elementor:

do_action( "elementor/css-file/{$name}/parse", $this );
这一切是如何运作的?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

通常是的,有时不是,but in your example, definitely bad practice

您可以看到,与其将名称或post ID放在操作名称中,不如将其作为参数传递。否则就没有办法抓取所有elementor css文件解析,也没有办法在导入帖子后任意工作。你需要提前知道可能出现的每一个可能的帖子ID或名称,这使得操作在使用中非常有限。

可能有意义的例子是,它是整个对象类的简写。这种情况比较少见,但举个例子publish_postspublish_book 哪里book 是自定义帖子类型。

请注意,在这些情况下,这些是除了not而不是通用挂钩之外执行的附加操作/挂钩。

结束