• 解決済 ys8

    (@ys8)


    質問させていただきます。
    WordPress 3.0.1のsidebar.phpでwp_list_pages関数exclude_treeを使いました。
    ■sidebar.php内の記述
    <?php wp_list_pages('exclude_tree=21,26,6,39,50&exclude=6&title_li=' ); ?>
    上のようにexclude_treeで除外したいページidを指定しましたが、
    複数指定すると、2つ目以降が正しく除外されずに困っています。
    こちらのフォーラム内とその他検索エンジンなどでも正しく表示される方法を探してみましたが直りません。
    http://www.mee77.com/?p=73こちらのページでwp-include/post.php内のfunction &get_pages($args = ”)関数内を修正するとあり、それ通りに修正を試みました。

    if ( !empty($exclude_tree) ) {
    $excludelist = preg_split(‘/[\s,]+/’,$exclude_tree);
    if ( count($excludelist) ) {
    $excludes = array();
    foreach ( $excludelist as $excludestr ) {
    $exclude = intval($excludestr);
    $children = get_page_children($exclude, $pages);
    foreach ( $children as $child ) {
    $excludes[] = $child->ID;
    }
    $excludes[] = $exclude;
    }
    $num_pages = count($pages);
    for ( $i = 0; $i < $num_pages; $i++ ) {
    if ( in_array($pages[$i]->ID, $excludes) )
    unset($pages[$i]);
    }
    }
        }

    しかし、以下のようなエラーが出てしまい、正しく表示されませんでした。
    Parse error: syntax error, unexpected ‘[‘ in C:\xampp\htdocs\wp\wp-includes\post.php on line 3204

    仕事でWPを使用し始めたばかりで、質問にわかりにくいところがあったら申し訳ありません。ご教授お願いします。

    ※プラグインは使用していません。
    ※ブラウザのキャッシュ・Cookie を削除してみました。
    ※xamppのローカルサーバ内で構築中。
    ※WordPress 3.0.1 を使用中。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック投稿者 ys8

    (@ys8)

    nobita様、回答ありがとうございます。

    URL先の物を参考に修正した結果、直りませんでした。
    教えていただいたURLからバージョン3.0のもの(http://core.trac.wordpress.org/ticket/9153)を見つけ、コードを以下のように修正しました。
    http://core.trac.wordpress.org/attachment/ticket/9153/9153.5.patch
    <?php wp_list_pages('exclude_tree=21,26,39,50&exclude=6&title_li=&sort_column=menu_order' ); ?>
    そしてwp-include/post.phpを以下のように修正しました。

    $exclusions = '';
        if ( !empty($exclude) ) {
            $expages = wp_parse_id_list( $exclude );
            if ( ! empty( $expages ) ) {
                foreach ( $expages as $expage ) {
                    if (empty($exclusions))
                        $exclusions = $wpdb->prepare(' AND ( ID <> %d ', $expage);
                    else
                        $exclusions .= $wpdb->prepare(' AND ID <> %d ', $expage);
                            }
                            }
                            $exclusions .= ')';
                     }
             }
            if (!empty($exclusions))
                    $exclusions .= ')';
    
             $author_query = '';
             if (!empty($authors)) {
    if ( !empty($exclude_tree) ) {
                    $exclude = array();
    
                    $exclude = (int) $exclude_tree;
                    $children = get_page_children($exclude, $pages);
                    $excludes = array();
                    foreach ( $children as $child )
                            $excludes[] = $child->ID;
                    $excludes[] = $exclude;
                    $excludes = array_map('intval', explode(',', $exclude_tree));
    
                    // exclude tree will work as describben - self and direct childs only (!)
                     $total = count($pages);
                     for ( $i = 0; $i < $total; $i++ ) {
                            if ( in_array($pages[$i]->ID, $excludes) )
                            if ( in_array($pages[$i]->ID, $excludes) ||
                                 in_array($pages[$i]->post_parent, $excludes))
                                     unset($pages[$i]);
                     }
             }

    とすると、またエラーが出ました。
    Parse error: syntax error, unexpected ‘}’ in C:\xampp\htdocs\wp\wp-includes\post.php on line 3233

    できれば、URLを指すだけではなく具体的に教えていただければ助かります。
    仕事で使うもので、WP構築本などを見ても対策が載っておらず大変困っています。
    よろしくお願いします。

    こんにちは、

    お役に立たなかったみたいですね、

    PHPのエラーについては、
    http://10key.net/php_error.html
    でまとめている人もいるようなので、今発生しているエラーがどういうものなのかを、知っておくといいと思います。

    コアファイルの改修は、次のアップデートで上書きされるなど、デリケートな管理が必要で、ほかへの影響など、リスキーです
    exclude_treeに頼らないで、解決する方法も検討してみてはいかがでしょうか

    例えば、Excluding Multiple Pages with (exclude_tree)

    Parse errorだからどっかでカッコ閉じが足りないか中カッコ閉じが多いんでしょう。
    nobitaさんと同じく、パースエラーも読めずに仕事でコアファイルをいじるのは大変リスキーだと思いますね。

    トピック投稿者 ys8

    (@ys8)

    nobita様、umbrella_process様、回答ありがとうございます。
    PHPのエラーまとめのURLありがとうございます。大変勉強になります。
    早速PHPのエラーを元に、post.phpを修正したところエラーは出なくなりました。
    しかし、exclude_treeの複数指定は適用されないままでした。

    コアファイルの変更については、できるだけしないほうがいいと私自身感じております。ですが、ほかに方法が思いつかなかったというのが正直なところです。(exclude_treeはバージョンが一度上がっても、修正されなかったという背景もあるようですし)
    exclude_treeに頼らず解決できれば一番いいのですが、最初に書いたようにexclude_treeを複数指定する方法があるなら知りたいと思い、今回質問させていただきました。
    貴重なお時間ありがとうございました。もう少し自分で調べてみます。

    このスレッドの最初のところで出てたparseエラーだけに注目して。

    preg_split(‘/[\s,]+/’,$exclude_tree);

    ここのクォートが全角になってますけど、実際はどうなんですか?

    トピック投稿者 ys8

    (@ys8)

    kvex様
    ご指摘の箇所を修正しましたら、希望の動作になりました!
    本当にありがとうございます!助かりましたー!これで作業が進みます。
    しかしながら、コピー&ペーストで貼っていた上に、何度新規ファイルで修正を試みていたのにどうして気付かなかったんでしょう…。本当に助かりました。
    kvex様含め、回答してくださった皆様ありがとうございました。
    大変勉強になりました。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「exclude_tree複数指定が効かない  wordpress3.0.1」には新たに返信することはできません。