如何在管理页面中获取POST ID?

时间:2019-02-18 07:07:07

标签: wordpress

我想在admin(帖子编辑)页面中获取帖子ID,以便我可以使用它来创建自定义上传路径。我在functions.php中使用的以下代码

function my_acf_upload_prefilter( $errors, $file, $field ) {

        // only allow admin
        if( !current_user_can('manage_options') ) {

            // this returns value to the wp uploader UI
            // if you remove the ! you can see the returned values
            $errors[] = 'test prefilter';
            $errors[] = print_r($_FILES,true);
            $errors[] = $_FILES['async-upload']['name'] ;

        }
        //this filter changes directory just for item being uploaded
        add_filter('upload_dir', 'my_upload_directory');

        // return
        return $errors;

    }

    add_filter('acf/upload_prefilter/name=images', 'my_acf_upload_prefilter');
    add_filter('acf/upload_prefilter/name=frg_graph1', 'my_acf_upload_prefilter');



    function my_upload_directory( $param ){
        $local_dir = "/images";
        $mydir = $local_dir;

        $param['path'] = $param['basedir'] . $mydir;
        $param['url'] = $param['baseurl'] . $mydir;

        // if you need a different location you can try one of these values
    /*
        error_log("path={$param['path']}");
        error_log("url={$param['url']}");
        error_log("subdir={$param['subdir']}");
        error_log("basedir={$param['basedir']}");
        error_log("baseurl={$param['baseurl']}");
        error_log("error={$param['error']}");
    */

        return $param;
    }

这是我用来为acf(高级自定义字段)文件设置自定义上传路径的代码。但是我要实现的是:动态路径而不是/ images。 。 通过将$ local_dir变量设置为当前帖子ID(我当前正在编辑的帖子)

以便文件上传到wp-content / uploads / id / file.jpg。

我尝试了全局$ post,但是返回NULL,get_current_screen()似乎未定义。

这有效:

function getpostid() {
global $post;
$id = $post->ID;

var_dump($id)
} 
add_action('admin_head', 'getpageid' );

但是只能使用钩子'admin_head'并且变量$ id在任何地方都无法访问:(

。 请帮助

1 个答案:

答案 0 :(得分:0)

您可以使用

$post_id = $_GET['post'];

或者您可以使用钩子(可能更好)。

function id_get_custom() {
    global $post;
    $id = $post->ID;
    // do something
}

add_action( 'admin_notices', 'id_get_custom' );

您将需要添加条件,因为它将在所有管理页面上运行,我建议使用get_current_screen();

例如仅在页面上运行:

function id_get_custom() {

global $my_admin_page;
$screen = get_current_screen();

if ( is_admin() && ($screen->id == 'page') ) {
    global $post;
    $id = $post->ID;
    var_dump($id);
}
}

    add_action( 'admin_notices', 'id_get_custom' );