web-dev-qa-db-ja.com

Wp_dropdown_pages()でオプションに番号を付けるには?

wp_dropdown_pages()を使用していますが、ユーザーに返されるオプションに番号を付けたいと思います。だから代わりにのようなもの...

<option value='http://someurl'>item one</option>
<option value='http://someurl'>item two</option>
<option value='http://someurl'>item three</option>

私は終わる:

<option value='http://someurl'>1. page one</option>
<option value='http://someurl'>2. page two</option>
<option value='http://someurl'>3. page three</option>

どのようにしてwp_dropdown_pages()の出力でそれをするのでしょうか?

1

変更する

<option value='http://someurl'>item one</option>
<option value='http://someurl'>item two</option>
<option value='http://someurl'>item three</option>

<option value='http://someurl'>1. item one</option>
<option value='http://someurl'>2. item two</option>
<option value='http://someurl'>3. item three</option>

Walker_PageDropdown::start_el()メソッドからlist_pagesフィルタを利用することができます。

これが例です:

// Add filter
add_filter( 'list_pages', 'wpse_itemize', 10, 2 );

// Display dropdown
wp_dropdown_pages();

// Remove filter
remove_filter( 'list_pages', 'wpse_itemize' );

コールバックは次のように定義されています。

function wpse_itemize( $title, $page )
{
    static $nr = 1;     
    return sprintf( '%d. %s', $nr++, $title );
}

更新

カスタムwp_dropdown_posts()関数のためにあなたが試すことができます:

if( function_exists( 'wp_dropdown_posts' ) )
{
    // Add filter
    add_filter( 'esc_html', 'wpse_itemize' );

    // Display dropdown
    wp_dropdown_posts();

    // Remove filter
    remove_filter( 'esc_html', 'wpse_itemize' );
}

コールバックは次のように定義されています。

function wpse_itemize( $safe_text )
{
    static $nr = 1;     
    return sprintf( '%d. %s', $nr++, $safe_text );
}

注意

ポストポストタイプのサポートをwp_dropdown_pages()に追加して、このハックでそれをやり遂げることができる方法に興味がありました。

global $wp_post_types;
$wp_post_types['post']->hierarchical = true;
wp_dropdown_pages( [ 'post_type' => 'post' ] );
$wp_post_types['post']->hierarchical = false;

しかし、私は絶対にお勧めしません。これは理論的な回避策が見つかるかどうかを確認するための単なるテストです。

4
birgire

ちなみに私はwp_dropdown_posts()を追加する関数を作成しました:

https://github.com/tripflex/wp_dropdown_posts

0
sMyles