Bagaimana cara membuat dan menautkan ke halaman administrasi untuk sebuah plugin?

8

OK Kode Lengkap:

<?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);
}

?>

POST LAMA

Hai kawan,

Saat ini saya sedang menulis sebuah plugin untuk klien saya di wordpress. Masalah yang saya alami adalah ketika pengguna mengklik edit untuk mengubah catatan saya tidak yakin bagaimana cara membuat tautan admin untuk melakukan ini.

yaitu

<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>";
}

Saya tahu markup saya untuk tag mungkin salah, tetapi saya baru saja menguji. Apakah saya perlu mendaftarkan kait untuk melakukan ini.


sumber
Pertama, Anda menyalin beberapa markup halaman ketika Anda menyesuaikan pertanyaan, hanya membiarkan Anda tahu ..;)
t31os
Bukan saya. Begitulah pertanyaan aslinya. Saya hanya mencoba untuk memperjelas judul (yang tampaknya akan membutuhkan dua).
Paling lambat
Dengan awalan fungsi ini sepertinya ada sesuatu yang dibangun di atas plugin WP e-Commerce? ..
Rarst
@Steve: Apakah masalah Anda bahwa Anda tidak tahu kapan / bagaimana menelepon wpsc_product_seo_details()? Apakah Anda menambahkannya ke menu Anda?
Jan Fabry
2
Ok, melihat solusi Anda, saya benar-benar hilang sekarang. :) Bisakah Anda mengganti nama pertanyaan Anda untuk secara akurat menggambarkan masalah dan konteks? Jadi orang lain bisa mendapat manfaat dari ini di masa depan.
Paling lambat

Jawaban:

6

Saya tidak yakin apa yang Anda coba lakukan.

Tautan admin dapat dengan mudah dibuat dengan admin_url()fungsi, seperti ini:

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

Apa yang sebenarnya Anda punya masalah?

Jarang
sumber
Ketika saya mengklik tautan, saya mendapatkan: Anda tidak memiliki izin yang memadai untuk mengakses halaman ini.
Maaf saya mungkin tidak menjelaskan ini dengan baik. Saya memiliki item submenu yang ketika Anda mengkliknya, Anda mendapatkan daftar produk. Saya memiliki tombol edit di sebelah setiap produk dan ketika administrator mengklik tombol itu, ia menuju ke url di atas dan memanggil fungsi yang relevan (Jadi saya dapat melakukan formulir edit produk, dll.)
Produk apa secara teknis, jenis posting khusus? Apa sebenarnya tautan edit itu? Saya masih tidak yakin, tetapi lihatlah di edit_post_link()mana menghasilkan tautan edit untuk setiap posting.
Paling lambat
4

Apakah Anda memiliki masalah dalam membuat halaman administrasi ?

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>';
}
Jan Fabry
sumber
Saya telah memperbarui blok kode di posting asli saya! - Semoga ini bisa membantu, saya yakin Anda akan mengatakan "WTF"
3

Hanya beberapa informasi untuk menandai diskusi, dan ini mungkin berguna bagi Anda nanti ..

Ketika Anda berada di halaman plugin, berbagai variabel admin ditetapkan, Anda dapat membangun URL dasar dari variabel-variabel itu dan menghasilkan tautan dari sana, dengan asumsi Anda ingin mereka menunjuk pada halaman plugin saat ini ..

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

*/

Ingin menambahkan vars permintaan Anda sendiri ke URL itu, cukup tambahkan mereka ke variabel yang dibuat di atas menggunakan 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
*/

Seharusnya secara teori setidaknya bekerja, saya tidak menguji kode, tetapi saya tidak melihat alasan itu tidak akan berhasil .. :)

t31os
sumber
Saya ingin mencatat bahwa kembalinya fungsi add page tidak berfungsi. Itu bukan nama halaman, itu pengidentifikasi layar yang lebih kompleks yang masuk ke $hook_suffixglobal. Anda juga dapat melewatkan array asosiatif sebagai argumen pertama add_query_arg()alih-alih menelepon beberapa kali.
Jarang
Saya tidak yakin saya mengikuti Rarst, apa sebenarnya yang tidak akan berhasil? Jika kode tidak akan melakukan apa yang seharusnya dilakukan maka saya akan menghapus jawabannya (kode yang tidak berfungsi hanya memiliki sedikit tujuan).
t31os
Maksud saya bagian ini $my_hook = add_xxxx_pagedalam komentar kode, $my_hooktidak akan berfungsi sebagai pengganti $plugin_pagekarena mereka adalah hal yang berbeda. Kode itu sendiri baik dan berfungsi.
Rarst
Saya tidak pernah menyarankan itu sebagai pengganti, hanya saja Anda bisa merujuk $my_hookmenggantikan var itu, karena mereka biasanya memiliki nilai yang sama. Tidak yakin bagaimana mereka berbeda, lihat bagaimana $plugin_pagediisi (wp-admin / admin.php), lalu lihat bagaimana nilai menu dibuat.
t31os
1
Ya benar maaf Anda, mulai awal, otak belum cukup boot ... lol .. lupakan komentar saya sebelumnya ..;) Saya akan menghapus bagian dari jawabannya.
t31os
2

Terselesaikan!

Cobalah untuk membuat rumit hal-hal ketika syarat sederhana akan melakukan trik dalam fungsi utama yang dipanggil dari halaman.

function wpsc_display_products_seo(){

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

}

sumber
mengapa Anda tidak memposting semua kode?
Francisco Corrales Morales