web-dev-qa-db-ja.com

カスタムサブメニュー項目を指すように最上位メニュー項目を変更する

私はCMS Page Order http://wordpress.org/extend/plugins/cms-page-order/ というプラグインを使用しています(現在参照中) CPOとして)

それは非常に簡単です、言ったプラグインはすべてのカスタム投稿タイプのサブメニューに新しい項目を追加します。メニュー項目から、特定の投稿タイプの投稿を並べ替えることができるページが表示されます。

このビューから直接新しい投稿を作成できるように追加したので、基本的にはWordpressのデフォルトの投稿編集ビューに似ていますが、投稿を並べ替えることもできます。これは通常の投稿編集ページをかなり役に立たなくします。

だから私の質問はです、それを置き換える "All投稿タイプ"のサブメニュー項目(edit.php?post_type=nameofposttype)を削除する方法はありますかこのメニュー項目はCPOによって作成され、最上位レベルのメニュー項目自体もCPOによって作成されたページを指すようにします。

–––

私がやろうとしていたのは、トップレベルのメニュー項目を、プラグイン管理メニューエディタを使用してCPOによって作成されたサブメニュー項目のURLに置き換えようとすることです。それから、トップレベルのメニュー項目が一番上のサブメニュー項目を指すことに気づいたので、CPOメニュー項目をサブメニューの一番上に移動しようとしました(すなわち、 "All pages/posts")。それは間違ったURLを生成するのでそれはまたうまくいきませんでした(それはトップレベルのメニュー項目をadmin.php?page=order-xxxに向けさせます)

これが私が何を意味するのかをさらに説明するための画像です。 Here's how the top level item regurlarly behaves

これがトップレベルのアイテムがデフォルトとして振る舞う方法です(edit.php?post_type=xxx

Now here's what happens if I move my page with the special menu handler to the top. The top level item gets a new URL, but it's erroneous

これが、特別なメニューハンドラを使って自分のページを一番上に移動した場合の結果です。最上位のアイテムは新しいURLを取得しますが、それは誤りです(admin.php?page=order-xxx

Here's the url that the special menu handler page has, the URL that the top level menu item should have

これは特別なメニューハンドラページが持っているURL、トップレベルのメニューアイテムが持っているべきURLです(edit.php?post_type=xxx&page=order-xxx

それでは、トップレベルのメニュー項目を必要なURLに変更するにはどうすればよいですか。

1
INT

メニューとサブメニューを表示するために、WordPressのグローバル変数でメニューを変更することもできます。最初の項目はすべてvar $menuにあり、すべての上位項目は$submenuにあります。

また、edit.phpを使ってサブメニュー項目の順序を変更するための小さな例です。このプラグインを追加して、デバッグを通じて結果を確認します。関数fb_cmpは並べ替えのロジックにすぎませんが、この関数でカスタムの順序を定義できます。彼女は usort のコールバックです。

<?php
/**
 * Plugin Name: .my Tests
 * Plugin URI:  http://bueltge.de/
 * Description: 
 * Version:     0.0.1
 */

add_action( 'admin_init', 'fb_get_menu' );
function fb_get_menu() {
    global $menu, $submenu;

    var_dump( $submenu['edit.php'] );
    usort( $submenu['edit.php'], 'fb_cmp' );
    echo '<hr>';
    var_dump( $submenu['edit.php'] );
}

function fb_cmp( $a, $b ) {

    if ($a->value == $b->value)
        return 0;
    else
        return $a->value < $b->value ? 1 : -1; // reverse order
}

スクリーンショットの結果としてヒント。 enter image description here

3
bueltge

あなたはjqueryを検討してみましたか?多分これはあなたを助けるでしょう。試してみましたが、うまくいきました。これを自分のfunctions.phpに入れるだけです。

add_action('admin_footer', 'change_post_url');
function change_post_url(){
?>
<script>
    jQuery(document).ready(function($){         
        $(".anchor_class_name").attr("href","sample.php");
    });
</script>
<?php
}
1
loQ

申し訳ありませんが、ページを登録するときにadd_query_arg( 'key', 'value' );を使用することができます。

このブログ記事ではWordPress管理メニューシステム の詳細を説明しました 。これは多すぎるし多すぎるのでこれを投稿することはできません。

0
kaiser