Wordpress-列出所有帖子,如编辑器中的“插入/编辑链接”

时间:2012-03-30 22:55:51

标签: wordpress list posts

我正在编写一个插件,我想创建一个用户可以选择的帖子/页面列表完全,就像您单击“链接”按钮时所看到的列表一样编辑和旋转'或链接到现有内容' - 有谁知道我在哪里可以找到/如何调用生成它的功能?

(我在wordpress.stackexchange中问过这个问题,但我似乎从未在任何地方发帖:()

3 个答案:

答案 0 :(得分:3)

谢谢Hobo!实际上我刚刚找到了自己的解决方案,当我看到你的答案时就准备发布了它!

无论如何,我会在这里发布我的解决方案,因为它可能对某人有用;)

所以这就是我所做的功能(基本上我从class_wp_editor.php中删除了它 - 它实际上与那里的'wp_link_query'相同......)

function ican_edit_link_query( $args = array() ) {
    $pts = get_post_types( array( 'public' => true ), 'objects' );
    $pt_names = array_keys( $pts );

    $query = array(
        'post_type' => $pt_names,
        'suppress_filters' => true,
        'update_post_term_cache' => false,
        'update_post_meta_cache' => false,
        'post_status' => 'publish',
        'order' => 'ASC',
        'orderby' => 'title',
        'posts_per_page' => 200000,
    );

    $args['pagenum'] = isset( $args['pagenum'] ) ? absint( $args['pagenum'] ) : 1;

    if ( isset( $args['s'] ) )
        $query['s'] = $args['s'];

    $query['offset'] = $args['pagenum'] > 1 ? $query['posts_per_page'] * ( $args['pagenum'] - 1 ) : 0;

    // Do main query.
    $get_posts = new WP_Query;
    $posts = $get_posts->query( $query );
    // Check if any posts were found.
    if ( ! $get_posts->post_count )
        return false;

    // Build results.
    $results = array();
    foreach ( $posts as $post ) {
        if ( 'post' == $post->post_type )
            $info = mysql2date( __( 'Y/m/d' ), $post->post_date );
        else
            $info = $pts[ $post->post_type ]->labels->singular_name;

        $results[] = array(
            'ID' => $post->ID,
            'title' => trim( esc_html( strip_tags( get_the_title( $post ) ) ) ),
            'permalink' => get_permalink( $post->ID ),
            'info' => $info,
        );
    }

}

我让它有大量帖子,以便返回所有帖子,然后迭代结果数组并将它们填入表格。

然后我在代码峡谷上发现了一些代码,当你在搜索框中输入时会对表进行过滤 - 就像在后端一样。这是http://codecanyon.net/item/advanced-tables/53366

我不确定这是否是“正确”的方式,因为显然我正在重复代码 - 可能你只需要用自己的args运行该函数,然后只处理你自己函数的结果......我会尝试一下并发布一些简化的代码......

答案 1 :(得分:1)

使用参数admin-ajax.php调用wp-link-ajax来填充该列表。这反过来调用_WP_Editors::wp_link_query()(在wp-includes/class-wp-editor.php中)。

查看代码,它似乎只接受页码和/或搜索词 - 您无法更改(例如)返回的帖子数(没有调用过滤器挂钩)。不确定这对你来说是否有问题。

要回答“如何找到生成该功能的功能”,我想有多种方法,但我使用的是Tamper Data Firefox插件。我看了浏览器对服务器的调用(没有篡改任何东西),看到哪个调用更新了列表。

答案 2 :(得分:1)

作为2014年的更新,现在有two useful filters用于此目的,因为Wordpress 3.7.0。