2016-06-14 5 views
1

私はWP_list_tablesクラスを拡張しました。私はこのすべての作業が検索$myRequestTable->search_box('Search', 'search_id')WP_List_tables :: search_box not working

から受け入れる言うように、それに探していくつかを実行した後、私はこの方法で、これは(以下呼び出すことがわかり、私のテーブルを表示するためのコードが

<div class="wrap"><h2>Request Log</h2> 
<form method="post"> 
    <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" /> 
    <?php if(isset($myRequestTable)) : ?> 
     <?php $myRequestTable->search_box('Search', 'search_id'); ?> 
     <?php $myRequestTable->prepare_items() ?> 
     <?php $myRequestTable->display() ?> 
    <?php endif; ?> 
</form> 

を下回っています)if (empty($_REQUEST['s']) && !$this->has_items()) 今すぐ$_REQUEST['s']は、検索ボックス自体で設定されているパラメータのようですので、既に表示されるまで表示されません。/

public function search_box($text, $input_id) { 
    if (empty($_REQUEST['s']) && !$this->has_items()) 
     return; 

    $input_id = $input_id . '-search-input'; 

    if (! empty($_REQUEST['orderby'])) 
     echo '<input type="hidden" name="orderby" value="' . esc_attr($_REQUEST['orderby']) . '" />'; 
    if (! empty($_REQUEST['order'])) 
     echo '<input type="hidden" name="order" value="' . esc_attr($_REQUEST['order']) . '" />'; 
    if (! empty($_REQUEST['post_mime_type'])) 
     echo '<input type="hidden" name="post_mime_type" value="' . esc_attr($_REQUEST['post_mime_type']) . '" />'; 
    if (! empty($_REQUEST['detached'])) 
     echo '<input type="hidden" name="detached" value="' . esc_attr($_REQUEST['detached']) . '" />'; 
?> 
<p class="search-box"> 
<label class="screen-reader-text" for="<?php echo $input_id ?>"><?php echo $text; ?>:</label> 
<input type="search" id="<?php echo $input_id ?>" name="s" value="<?php _admin_search_query(); ?>" /> 
<?php submit_button($text, 'button', '', false, array('id' => 'search-submit')); ?> 
</p> 
<?php 
} 

私は間違っているかもしれませんが、私はそうではなく、$ _REQUEST ['s']は検索ボックスを表示するように設定する必要があります。これはどこに設定されますか何とか設定する必要がありますか?

は、私はいくつかの検索を行なったし、これを見つけた: https://wordpress.stackexchange.com/questions/127138/wp-list-table-search-box-does-not-show

いくつかのいずれかが問題ではなく、解決方法をオーバーライドすることで解決OPを指摘していますが、私はこの方法を使用する方法がなければならないと感じていますWPが提供する。誰も助けることができますか?

答えて

1

私はこれを間違っていました。私はWP関数を正しく読んでいなかったので、実際には$_REQUEST['s']が空である必要があります。それは!$this->has_items()で失敗していました。これはディスプレイ上のメソッドを呼び出していたためです。アイテムはまだ準備されていないので、クラスの$ itemsプロパティは空です。関数が呼び出される順序が変更され、これが完全に機能するようになりました。

<div class="wrap"><h2>Request Log</h2> 
<form method="post"> 
<input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" /> 
<?php if(isset($myRequestTable)) : ?> 
    <?php $myRequestTable->prepare_items() ?> 
    <?php $myRequestTable->search_box('Search', 'search_id'); //Needs To be called after $myRequestTable->prepare_items() ?> 
    <?php $myRequestTable->display() ?> 
<?php endif; ?> 
</form> 

私は少し愚かだと感じますが、少なくともこれは解決されました。