我正在编写一个插件,我想创建一个用户可以从中选择的帖子/页面列表,这与您在编辑器中单击“链接”按钮并向下旋转“或链接到现有内容”时看到的列表完全相同'- 有谁知道我在哪里可以找到/如何调用生成它的函数?
(我在 wordpress.stackexchange 中问过这个问题,但我似乎从来没有在任何地方张贴过:()
谢谢流浪汉!实际上,我刚刚找到了自己的解决方案,并在看到您的答案时正要发布!
无论如何,我会在这里发布我的解决方案,因为它可能对某人有用;)
所以这是我制作的函数(基本上我是从 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 运行那个函数,然后处理你自己函数的结果......我会尝试一下并发布一些简化的代码......
admin-ajax.php
该列表是使用带有参数的调用填充的wp-link-ajax
。这反过来调用_WP_Editors::wp_link_query()
(in wp-includes/class-wp-editor.php
)。
查看代码,它似乎只接受页码和/或搜索词 - 您无法更改(例如)返回的帖子数量(没有调用过滤器挂钩)。不确定这是否会给您带来问题。
要回答您的“我怎样才能找到生成该函数的函数”,我想有多种方法,但我使用了Tamper Data Firefox 插件。我观察了浏览器对服务器的调用(没有篡改任何东西),并查看了哪个调用更新了列表。
作为 2014 年的更新,现在有两个用于此目的的有用过滤器,自 Wordpress 3.7.0 起。