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

明らかにコードを繰り返しているため、それが「正しい」方法であるかどうかはわかりません。おそらく、独自の引数でその関数を実行し、独自の関数の結果を処理することができます...私はそれを試して、合理化されたコードを投稿してください...

于 2012-03-31T15:56:54.297 に答える
1

2014 年の更新として、Wordpress 3.7.0 以降、この目的に役立つ 2 つのフィルターが追加されました。

于 2014-11-10T08:44:21.183 に答える
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 に答える