プラグインの管理ページを作成してリンクする方法は?


8

OK完全なコード:

<?php

//check to see whether the user is an admin or not.
if (is_admin()) {


function wpsc_display_products_seo(){
global $wpdb;
$productList = $wpdb->get_results("SELECT * FROM " . WPSC_TABLE_PRODUCT_LIST . " ORDER BY name ASC");
echo  get_admin_page_parent(); 

$path = 'admin.php?page=wpsc_product_seo_details';
$url = admin_url($path);


?>
<h2><?php _e('Products List','wpsc'); ?></h2>
<p>Below is a list of products. Select a product to edit it's SEO properties.</p>
    <table>
        <tr>
            <td></td>
            <td>Product Name</td>
            <td>Meta Title</td>
            <td>Meta Description</td>
            <td>Edit</td>
        </tr>
    </table>

    <table>
        <?php if($productList) : ?>
            <?php foreach($productList as $product) : ?>
                <?php $meta = getProductMeta($product->id); ?>
                <tr style="background:#fff;">
                    <td width="200"><?php echo $product->name; ?></td>
                    <td width="300"><?php getVal($meta, 'meta_title'); ?></td>
                    <td width="200"><?php getVal($meta, 'meta_description'); ?></td>
                    <td width="200"><?php getVal($meta, 'meta_keywords'); ?></td>
                    <td width="200"><a href="<?php echo $url; ?>">Edit</a></td>
                </tr>
            <?php endforeach; ?>
        <?php endif; ?>
    </table>

<?php

}

function wpsc_product_seo_details()
{
    echo "<h2>Hello</h2>";
}

function getProductMeta($id)
{
    global $wpdb;
    $meta = $wpdb->get_results("SELECT * FROM " . WPSC_TABLE_PRODUCT_META . " WHERE product_id = $id");
    if($meta)
    {
        return $meta;
    } else {
        return null;
    }
}

function getVal($RS, $key)
{
    if($RS)
    {
        if (property_exists($RS, $key))
        {
            return $RS->$key;
        } 
    }
    return null;

}




    function wpsc_add_seo_admin_pages($page_hooks, $base_page) {
        $page_hooks[] =  add_submenu_page($base_page, __('SEO For Products','wpsc'),  __('SEO For Products','wpsc'), 7, 'wpsc-module-seo', 'wpsc_display_products_seo');
        return $page_hooks;
    }
    add_filter('wpsc_additional_pages', 'wpsc_add_seo_admin_pages',10, 2);
}

?>

古い投稿

こんにちは、みんな、

私は現在、ワードプレスで私のクライアント用のプラグインを書いています。私が抱えている問題は、ユーザーが編集をクリックしてレコードを変更するときに、これを行うための管理リンクを作成する方法がわかりません。

すなわち

<a href="<?php echo get_bloginfo('url'); ?>/wp-admin/admin.php?page=wpsc_product_seo_details">Edit</a>


function wpsc_product_seo_details()
{
    echo "<h2>Hello</h2>";
}

タグのマークアップがおそらく間違っていることは知っていますが、私はテストを行っていました。これを行うにはフックを登録する必要がありますか?


あなただけ..あなたが知っているせ、質問を調整するときRarst、ページのマークアップの一部をコピー;)
t31os

私じゃなかった。それが元々の質問でした。タイトルを明確にしようとしたところです(タイトルは2つ必要です)。
Rarst

関数の接頭辞により、これはWP e-Commerceプラグインの上に構築されたもののように見えますか?
Rarst

@Steve:いつ、どのように呼び出すwpsc_product_seo_details()かわからないという問題はありますか?なんとかメニューに追加しましたか?
Jan Fabry、2010年

2
さて、あなたの解決策を見て、私は今完全に失われています。:)問題とコンテキストを正確に説明するように質問の名前を変更していただけませんか?したがって、他の人は将来的にこれから利益を得ることができます。
Rarst、

回答:


6

あなたが何をしようとしているのかわかりません。

管理リンクはadmin_url()、次のような関数で簡単に作成できます。

$path = 'admin.php?page=wpsc_product_seo_details';
$url = admin_url($path);
$link = "<a href='{$url}'>Edit</a>";
echo $link;

正確に何に問題がありますか?


リンクをクリックすると、このページにアクセスするための十分な権限がありません。

申し訳ありませんが、これについてはあまりよく説明していません。クリックすると製品のリストが表示されるサブメニュー項目があります。各製品の横に編集ボタンがあり、管理者がそのボタンをクリックすると、上のURLに移動して関連する機能が呼び出されます(そのため、製品の編集フォームなどを実行できます)

製品は技術的にどのようなカスタム投稿タイプですか?正確に編集リンクとは何ですか?まだわかりませんが、edit_post_link()個々の投稿の編集リンクを生成する方法を見てください。
Rarst

4

管理ページの作成に問題がありますか?

add_action( 'admin_menu', 'wpse4677_admin_menu' );
function wpse4677_admin_menu()
{
    add_options_page(
        'WPSE 4677 Page title',
        'WPSE 4677 Menu item title',
        'manage_options', // Minimum capability to view this page
        'wpse4677-page-identifier', // Unique identifier
        'wpse4677_page_content' // Callback function to get the contents
    );
}

function wpse4677_page_content()
{
    echo '<div class="wrap">';
    echo '<h2>Welcome to my page!</h2>';
    echo '</div>';
}

元の投稿でコードブロックを更新しました。-これがお役に立てば幸いです。 "WTF"と言ってください

3

ディスカッションにタグ付けする情報の一部であり、これは後で役立つ場合があります。

プラグインページでさまざまな管理変数が設定されている場合、それらの変数からベースURLを構築し、そこからリンクを生成することができます。

global $pagenow, $plugin_page;
$this_page = add_query_arg( 'page', $plugin_page, admin_url( $pagenow ) );
/* 
   Example URL
   themes.php?page=custom-background 

   $pagenow     - themes.php
   $plugin_page - custom-background

*/

独自のクエリ変数をそのURLに追加するには、単にadd_query_arg... を使用して上記で作成した変数に追加し ます。

$edit_link = add_query_arg( 'edit_id', $id, $this_page );
/*
   Example only, $id would need to come from your code
   and $edit_link generated appropriately for each result you display
*/

少なくとも理論的には機能するはずですが、コードをテストしませんでしたが、機能しない理由はわかりません.. :)


ページ追加機能のリターンが機能しないことに注意したい。これはページの名前ではなく、$hook_suffixグローバルに入るより複雑な画面識別子です。またadd_query_arg()、複数回呼び出す代わりに、連想配列の配列を最初の引数として渡すことができます。
ラースト、2011

Rarstをフォローしているのかわかりませんが、何が機能しないのですか?コードが意図したとおりに機能しない場合は、答えを削除します(機能しないコードはほとんど目的がありません)。
t31os

私は$my_hook = add_xxxx_pageコードのコメントでこの部分を意味し$my_hookましたが$plugin_page、それらは異なるものであるため、の代替としては機能しません。コード自体は健全で機能しています。
ラースト

$my_hookそれらは通常同じ値を保持しているので、その変数の代わりに参照できることだけを置き換えとして提案したことはありません。それらがどのように異なるのかわからない場合は、どのよう$plugin_pageに入力されるか(wp-admin / admin.php)を確認してから、そのメニュー値がどのように作成されるかを確認してください。
t31os

1
はい、申し訳ありませんが、早い段階で開始しました。脳はまだ起動していませんでした... lol ..以前のコメントを忘れてください..;)答えのその部分を削除します。
t31os

2

解決しました!

ページから呼び出されるmain関数で単純な条件がうまく機能する場合は、複雑すぎないようにしてください。

function wpsc_display_products_seo(){

    if($_GET['pid'] != "") 
    {
        renderProductForm();
    } else {
        renderProductList();
    }

}

なぜすべてのコードを投稿しなかったのですか?
フランシスココラレスモラレス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.