如何获取尚未创建的帖子的未来ID?

时间:2012-03-13 作者:Sisir

Calling Post ID: 让我们首先调用post id定义:)我在核心文件中实际找到的这个名称wp-admin/includes/media.php 这意味着对于您请求媒体上传的帖子。媒体连接到媒体上载程序调用的帖子。

Question: 嗯,对于新帖子(当您单击“添加新帖子”或“添加新cpt”并打开wp-admin/post-new.php 页您会注意到,已经为可能的新帖子分配了一个帖子id。要选中此选项,请将鼠标悬停在media upload(媒体上载)按钮上并注意url。

media upload

所以how to I find the post_id of the possible post? 我正试图找出如何获得该帖子id,并在核心文件中搜索,但运气不好。

感谢您的帮助:)

Update: 也许我的问题有点误会。因为我没有说我将在哪里使用代码。我正在制作一个前端用户仪表板,在那里我需要获取id而不是后端管理面板,该图像用于演示目的。在这个问题上使用类似的代码Image uploader with "Set Featured Image" link on front end

3 个回复
最合适的回答,由SO网友:soulseekah 整理而成

你在正确的道路上思考post-edit.php.

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-admin/post-new.php#L45

查看如何get_default_post_to_edit 被调用以返回新帖子。第二个参数告诉它在数据库中创建一篇文章。函数定义如下:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-admin/includes/post.php#L394

注释第422行:$post_id = wp_insert_post( array( \'post_title\' => __( \'Auto Draft\' ), \'post_type\' => $post_type, \'post_status\' => \'auto-draft\' ) );

如果没有钩子,WordPress会在哪里?

do_action(\'wp_insert_post\', $post_ID, $post); 可以在中看到wp_insert_post\'此处的定义:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/post.php#L2656

因此,如果你陷入这样的境地:

add_action( \'wp_insert_post\', \'wpse_45419_hold_global_post_number\', null, 2 );
function wpse_45419_hold_global_post_number( $post_id, $post ) {
    if ( $post->post_status != \'auto-draft\' ) return; // not interested, thanks

    // do stuff with $post_id here...
}
当然,这将是一件非常有趣的事情,而且是非常肯定的。或者,如果您查看media(媒体)按钮的获取方式:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-admin/includes/media.php#L371

它使用get_upload_iframe_src, 定义得稍微低一点,这利用了全局$post_ID, 这让我们回到post-new.php 您可以在第46行看到它的定义:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-admin/post-new.php#L46

所以,一般来说,在第46行之后触发的所有钩子都是您自己的$post_ID 全球,包括wp_insert_post, media_buttons, 还有其他几十个。请注意,initadmin_init 在链条上来得太早。并确保钩子足够具体,只有在需要时才能开火。wp_insert_post 是好的,但不会有全球性的post_ID 设置,因为它将在函数返回后立即设置。

很迷人,不是吗?

SO网友:Bainternet

可以归结为一个简单的单行线:

var p_id = jQuery("#content-add_media").attr(\'href\').split("post_id=")[1].split("&")[0];
现在呢p_id 持有职位id。

Update在这种情况下,您不需要帖子id,只需跟踪附件id,创建帖子并获取其id后,只需更新post_parent 新创建的帖子想法的附件字段,如下所示

//array of attachment ids
$attachments = array(12,33,434);
global $wpdb;
$wpdb->query(
    "
    UPDATE $wpdb->posts 
    SET post_parent = $post_id
    WHERE ID IN (".implode(",",$attachments) .")
    AND post_type = \'attachment\'
    "
);

SO网友:lonelioness

我偶然看到这篇文章,是想寻找一种方法来获取下一个帖子id,而不必创建新帖子,就像添加一个新帖子/页面时一样。php。下面是我为woocommerce帖子类型的下一个ID创建的示例代码\'shop_order\' 但它不会创建新的邮政/订单。这与通过post new添加新页面时的功能相同。php。此短代码[myget_default_order_page_to_edit] 将在前端显示下一个ID号。页面内的过去短代码。在子主题函数中粘贴以下代码。php或在代码段插件中创建它。

/**
 * Get the default page information to use.
 *
 * @since 2.5.0
 * @deprecated 3.5.0
 * @deprecated Use get_default_post_to_edit()
 *
 * Helpful examples: https://hotexamples.com/examples/-/-/get_default_post_to_edit/php-get_default_post_to_edit-   function-examples.html
 * https://developer.wordpress.org/reference/functions/get_default_post_to_edit/
 * @return WP_Post Post object containing all the default post data as attributes
 * shop_order is a post type from Woocommerce. Replace shop_order with desired post type.
 * shortcode to view the next id/order # [myget_default_order_page_to_edit]
 */
add_shortcode(\'myget_default_order_page_to_edit\',\'myget_default_order_page_to_edit\');
function myget_default_page_to_edit( $post_type = \'shop_order\'){
    
    require_once( ABSPATH . \'/wp-admin/includes/post.php\' );

     $order = get_default_post_to_edit($post_type, true);

     echo $order->ID;
     
// echo post id/ order id inside html
    echo "<div>The Next Order ID # {$order->ID}</div>";

}

结束

相关推荐

为什么要在定制页面中使用Query_Posts()?

嗨,我是wordpress的新手,想知道query_posts() 作用如果有索引页或主页,则不需要此功能来显示帖子,但如果我制作了自定义页,则必须使用此功能来显示帖子。为什么?