2011-01-19 5 views
0

WordPressに登録されているすべてのpage_nameの配列を取得する必要があります。私は2つの問題があります、私はget_pages()などを行うことができますが、それは文字通り、内容を含む各ページについてのすべてのfreakin事を引き出します。私が必要とするすべての場合、完全に不要なオーバーヘッドはpage_nameです。WordPressのすべてのpage_namesを余分なく返しますか?

もう1つは、可能な場合は組み込みの方法で行いたいということです。これは社内のプラグイン用であり、メインラインとの互換性を維持したいと考えています。 (最悪の場合はDBに直接アクセスして取得します)get_pages()呼び出しでインクルード/除外できることはわかっていますが、反対ではなく1つだけを取り出すことを排除することが可能かどうかはわかりません。

ハードコードされた文字列を持つことができない、つまりページ自体や呼び出されたものについて何も知ることができないという点で、動的である必要があります。順序付けられていないリストや何かにあるような余分なジャンクもありません。ストレートアレイ、レベルは必要ありません。 (サブページはプライマリと同じです)

アイデアはありますか?私は検索して検索しましたが、おそらくあなたが知っているように、これらの種類のものについてはドキュメントが遅れています。

ありがとうございました。私は最後または類似してみたいものの

例:

Array 
(
    [0] => stdClass Object 
     (
      [page_name] => 'page1' 
     ) 
    [1] => stdClass Object 
     (
      [page_name] => 'page2' 
     ) 
    [2] => stdClass Object 
     (
      [page_name] => 'page3' 
     ) 
    [3] => stdClass Object 
     (
      [page_name] => 'page4' 
     ) 
) 

答えて

0

私はget_pages()source codeをチェックして、データベースから要求されているものを制限することができます方法はありません。ページはlines 3177-3184にフェッチされています。ご覧のとおり、SELECT * FROMというクエリがハードコードされています。

+1

これを投げました。ご協力いただきありがとうございます。 – Jay

2

返されるフィールドを制限するには、フィルタを設定します。あなたのテーマのfunctions.phpファイル、またはプラグインでは、誰もがきれいな解決策を持っている場合は、今私はただのWordPressのDB接続で構築を使用して手動でそれらをつかむつもりだため。チャイムください

add_filter('get_pages', 'get_pages_filter'); 

function get_pages_filter($res){ 
    $res = array_map('get_pages_title', $res); 
    return $res; 
} 

function get_pages_title($item){ 
    return (object) array('page_name' => $item->post_name); 
} 

$pages = get_pages(); 
var_dump($pages); 
+0

私が間違っていると私を修正しますが、これはプラグインがロードされた後にget_pages()のすべての使用に影響するようです。 trueの場合、他のプラグインが何らかの理由でget_pagesを使用する必要がある場合に備えて、そうしないでください。 – Jay

+1

その場合は、get_pages()を呼び出す前にフィルタを直接追加することをお勧めします。その後、おそらくremove_filter( 'get_pages'、 'get_pages_filter')を呼び出すことになります。同じように。 – postpostmodern

0

を試してみてください。

好奇心のために

...私はちょうど私が誰かがクリーンソリューションを持っていない限り、ちょうど私自身wpdb呼び出しを行う働いている..迅速な...おそらくない最高一緒

/** 
* get_wpdb_values() 
* 
* DESC: 
* 
* Allows you to make a WP Database connection 
* and return an Array => Object of what ever 
* values you need from a table. 
* 
* Was made for the purpose of returning a page 
* list, but since you pass it the field you 
* want returned, along with with optional filters 
* it can easily be used for other purposes. 
* 
* USAGE: 
* 
* array get_wpdb_values (string $table [, string $field [, array $filters ]]) 
* 
* PARAMETERS: 
* 
* ----------|----------------------------------------------------------------- 
* $table | Required table you want to return values from. 
*   | DO NOT INCLUDE THE WP PREFIX! (e.g. use 'posts' not 'wp_posts' 
* ----------|----------------------------------------------------------------- 
* $field | Optional field name you want returned. (Default returns * all) 
* ----------|----------------------------------------------------------------- 
* $filters | Optional filtering passed as field => value array. 
* ----------|----------------------------------------------------------------- 
*/ 

function get_wpdb_values($table = null, 
          $field = "*", 
          $filters = null) 
{ 
    // Get access to the 
    // WordPress Database 
    // class in this scope 

    global $wpdb; 

    // If we weren't passed any 
    // arguments, get out quick 

    if(is_null($table) || empty($table)) 
     return false; 

    // Add optional filters if 
    // they were passed in 

    if(!is_null($filters)) 
    { 
     // Counter is so we can tell 
     // if there is more then one 
     // filter so we can add the 
     // AND separator in the 
     // SQL query 

     $WHERE = "WHERE "; 
     $counter = 0; 

     foreach ($filters as $key => &$value) 
     { 
      $counter++; 

      // If we're on the second or more 
      // pair, we add the AND to chain 
      // conditional WHERE's 

      $AND = ($counter >= 2) ? " AND" : null; 

      // Append to existing WHERE 
      // statement 

      $WHERE .= "$AND $key = '$value' "; 
     } 
    } 
    else 
    { 
     // No filters passed 

     $WHERE = null; 
    } 

    // Get WordPress formatted 
    // table name 

    $wp_table = $wpdb->$table; 

    // Putting it all together 

    $query = "SELECT $field FROM $wp_table $WHERE "; 

    // Make actual DB call 
    // through the built in 
    // MySQL interface for 
    // WordPress to at least 
    // attempt to remain 
    // compatible with mainline 

    return $wpdb->get_results($query); 
} 
関連する問題