如何在快速编辑回调中获取当前帖子ID

时间:2013-09-30 作者:kaiser

这个问题是相关的to another previously asked question, 这是一个后续的答案。

任务

由于我想将QuickEdit扩展为真正棒的东西(不仅仅是QuickEdit),我需要回调中当前“快速编辑”帖子的ID。

核心标记class-wp-posts/terms-list-table.php 文件和WP_*_List_Table#inline_edit() 函数中,没有通过PHP设置的复选框、输入字段等的值。所有这些都是通过JavaScript设置的。结构如下所示:

<!--
The post list & the inline edit markup row that gets moved
based on what post we currently edit
-->
<form id="posts-filter" action method="get">
    <table class="wp-list-table ...">
        <tbody id="the-list">
            <tr id="post-{$ID}">Post Data</tr>
            <tr id="post-{$ID}">another post... etc.</tr>
            <!-- ... even more posts -->
        </tbody>
    </table>
    <!--
    Here goes the edit row. 
    It\'s filled, edited and moved dynmically.
    -->
    <tr id="edit-{$currently_edited_post_ID}">
        <!-- ... -->
    </tr>
</form>
<form method="get" action>
    <table style="display:none;">
        <tbody id="inlineedit">
            <tr id="inline-edit">
                <!--
                Here are the default quick edit boxes
                as well as all custom boxes.
                You\'ll have to add a custom columns as well - see other question.
                -->
            </tr>
            <tr id="bulk-edit"></tr>
        </tbody>
    </table>

</form>
自定义快速编辑字段取决于要向其中添加自定义快速编辑框的列表表(post/term),我们需要向过滤器添加回调。同样,只有当我们有一个自定义列时,这些才起作用(参见其他问题)。

add_action( \'quick_edit_custom_box\', array( $this, \'addFields\' ), 10, 3 );
# add_action( \'bulk_edit_custom_box\', array( $this, \'addFields\' ), 10, 2 );
回调本身具有实际problem I\'m facing. 我们有两个(如果是术语,则有三个)论点:$postType$columnName. 两者都不能帮助我检索实际$post_ID, 我需要这样的东西wp_editor() 例如

public function addFields( $colName, $postType, $taxonomy = \'\' )
{
    // How to retrieve the ID of the currently quick edited post in here?
}

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

您可以从快速编辑屏幕的父级获取每个JavaScript的IDtr: 有属性的id="edit-418", 哪里418 是帖子ID。

因此,提取这个数字,根据AJAX获取post数据,并插入所需的值。不优雅。

阅读wp-admin/js/inline-edit-post.js 看看核心是怎么做到的。

SO网友:Eugene Manuilov

不幸的是,无法扩展。。。为什么?因为快速编辑的东西(对于某些帖子)是“硬编码”的,不能通过插件扩展。。。

要证明这一点,请调查代码:

单击Quick Edit 链接inlineEditPost 等级(英寸inline-edit-post.js 文件)处理并调用edit method. 看看136 line, 这里它从#inline_{post_id} 容器如您所见,您无法扩展此函数。。。

  • #inline_{post_id} 容器由填充get_inline_data($post) function. 再一次没有do_actionapply_filters 打电话但没有机会延长。。。

  • get_inline_data($post) 函数由调用WP_Posts_List_Table 类,该类负责呈现posts表at 608 line.

    这意味着,即使你想出了一种方法来获取单行快速编辑操作的帖子ID,你也无法用它做很多事情。。。

    只有部分相关的编辑-无法解决问题

    因此,如果需要将其他数据传递给隐藏字段,可以使用editable_slug 过滤器:

    add_filter( \'editable_slug\', array( $this, \'hiddenInlineFields\' ) );
    
    /**
     * Allows to add fields to the hidden fields per post.
     * Allows inlineEditPost and other JS functions to access data from there.
     * @param string $postName
     * @return string
     */
    public function hiddenInlineFields( $postName )
    {
        return $postName.\'</div><div class="ID">\'.get_the_ID();
    }
    

  • 结束

    相关推荐