1

我正在编写一个插件,我想创建一个用户可以从中选择的帖子/页面列表,这与您在编辑器中单击“链接”按钮并向下旋转“或链接到现有内容”时看到的列表完全相同'- 有谁知道我在哪里可以找到/如何调用生成它的函数?

(我在 wordpress.stackexchange 中问过这个问题,但我似乎从来没有在任何地方张贴过:()

4

3 回答 3

3

谢谢流浪汉!实际上,我刚刚找到了自己的解决方案,并在看到您的答案时正要发布!

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

所以这是我制作的函数(基本上我是从 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 运行那个函数,然后处理你自己函数的结果......我会尝试一下并发布一些简化的代码......

于 2012-03-31T15:56:54.297 回答
1

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

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

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

于 2012-03-31T14:20:48.947 回答
1

作为 2014 年的更新,现在有两个用于此目的的有用过滤器,自 Wordpress 3.7.0 起。

于 2014-11-10T08:44:21.183 回答