两个函数具有不同的参数和Add_Actions,但代码相同

时间:2021-01-08 作者:Drew Schlichtmann

我觉得这很简单。

我有两个包含相同代码的函数,但需要有不同的add\\u操作和参数。必须有一种方法可以做到这一点,所以当我想添加更多代码时,我不会在两者之间复制和粘贴,而且你不应该复制代码。我错过了什么?

一个用于ACF并在更新帖子类型时激发,另一个用于Admin列,该列在内联编辑相同的帖子类型时激发相同的操作。如果有帮助的话,我会把它们放在插件文件中。

    function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {

runs same code

    }
    add_action( \'acp/editing/saved\', \'acp_editing_saved_usage\', 10, 3 );


    function my_acf_save_post( $post_id ) {

runs same code

    }
    add_action(\'acf/save_post\', \'my_acf_save_post\');

1 个回复
最合适的回答,由SO网友:Celso Bessa 整理而成

如果我在这里没有遗漏什么,那么您可以有第三个/主函数,它有两个不同的包装器。

function wpse381184_main(){
    //do your thing!
}

function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {
    // call wpse381184_main()
    wpse381184_main();
}
add_action( \'acp/editing/saved\', \'acp_editing_saved_usage\', 10, 3 );
function my_acf_save_post( $post_id ) {
    // call wpse381184_main()
    wpse381184_main();
}
add_action(\'acf/save_post\', \'my_acf_save_post\');
如果你需要wpse381184_main 要根据调用包装器使用不同数量的参数,您可以使用包含更多参数的大小写对其进行结构,并通过使用current_filter() 作用

function wpse381184_main($post_id, $hook, AC\\Column $column, $value){
    if( \'acp/editing/saved\' ===  $hook){
        //do your thing in case A and exit!
        return;
    }
    // do your thing in "default" case B!
}

function acp_editing_saved_usage1( AC\\Column $column, $post_id, $value ) {
    // call wpse381184_main()
    wpse381184_main($post_id, current_filter());
}
add_action( \'acp/editing/saved\', \'acp_editing_saved_usage\', 10, 3 );
function my_acf_save_post( $post_id ) {
    wpse381184_main($post_id, current_filter());
}
add_action(\'acf/save_post\', \'my_acf_save_post\');

相关推荐

Problem in functions.php file

我正在尝试使用functions.php. 以下是我迄今为止所做的工作: <?php function blogroom() { wp_enqueue_style(\'bootstrap\', get_stylesheet_directory_uri() . \'/assets/lib/bootstrap/dist/css/bootstrap.min.css\'); wp_enqueue_style(\'loade