Làm cách nào để tạo và liên kết đến trang quản trị cho một plugin?


8

OK Mã đầy đủ:

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

?>

BÀI ĐĂNG

Chào các cậu,

Tôi hiện đang viết một plugin cho khách hàng của tôi trong wordpress. Vấn đề tôi gặp phải là khi người dùng nhấp vào chỉnh sửa để thay đổi bản ghi Tôi không chắc chắn cách tạo liên kết quản trị để thực hiện việc này.

I E

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

Tôi biết đánh dấu của tôi cho thẻ có thể sai nhưng tôi chỉ đang thử nghiệm. Tôi có cần phải đăng ký một cái móc để làm điều này.


Trước đây, bạn đã sao chép một số đánh dấu trang khi bạn điều chỉnh câu hỏi, chỉ cần cho bạn biết ..;)
t31os

Không phải tôi. Đó là cách câu hỏi ban đầu. Tôi chỉ cố gắng làm rõ tiêu đề (mà dường như sẽ cần hai).
Hiếm

Theo tiền tố chức năng, nó có vẻ giống như một cái gì đó được xây dựng trên đầu plugin WP Thương mại điện tử? ..
Rarst

@Steve: Có phải vấn đề của bạn là bạn không biết khi nào / gọi như thế nào wpsc_product_seo_details()? Bạn đã thêm nó vào thực đơn của bạn bằng cách nào đó?
Jan Fabry

2
Ok, nhìn vào giải pháp của bạn bây giờ tôi hoàn toàn bị mất. :) Bạn có thể vui lòng đổi tên câu hỏi của bạn để mô tả chính xác vấn đề và bối cảnh không? Vì vậy, những người khác có thể được hưởng lợi từ điều này trong tương lai.
Rarst

Câu trả lời:


6

Tôi không chắc chắn những gì bạn đang cố gắng làm.

Liên kết quản trị có thể được tạo thuận tiện với admin_url()chức năng, như thế này:

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

Chính xác thì bạn có vấn đề gì với?


Khi tôi nhấp vào liên kết, tôi nhận được: Bạn không có đủ quyền để truy cập trang này.

Xin lỗi tôi có lẽ không giải thích điều này rất tốt. Tôi có một mục menu con mà khi bạn nhấp vào nó, bạn sẽ nhận được một danh sách các sản phẩm. Tôi có một nút chỉnh sửa bên cạnh mỗi sản phẩm và khi quản trị viên nhấp vào nút đó, nó sẽ chuyển đến url ở trên và gọi chức năng có liên quan (Vì vậy tôi có thể thực hiện một biểu mẫu chỉnh sửa sản phẩm, v.v.)

Sản phẩm là những gì kỹ thuật, các loại bài tùy chỉnh? Chỉnh sửa liên kết chính xác là gì? Tôi vẫn không chắc chắn, nhưng hãy xem cái edit_post_link()nào tạo ra các liên kết chỉnh sửa cho từng bài đăng.
Hiếm

4

Bạn có vấn đề khi tạo trang quản trị ?

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

Tôi đã cập nhật khối mã trong bài viết gốc của mình! - Hy vọng điều này có ích, tôi chắc chắn bạn sẽ nói "WTF"

3

Chỉ cần một số thông tin để gắn thẻ vào cuộc thảo luận và điều này có thể hữu ích cho bạn sau này ..

Khi bạn đang ở trang plugin, nhiều biến quản trị khác nhau được đặt, bạn có thể tạo URL cơ sở từ các biến đó và tạo liên kết từ đó, giả sử bạn muốn chúng trỏ đến trang plugin hiện tại ..

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

*/

Muốn thêm các vars truy vấn của riêng bạn vào URL đó, chỉ cần thêm chúng vào biến được tạo ở trên bằng cách sử dụng 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
*/

Nó ít nhất phải hoạt động trên lý thuyết, tôi đã không kiểm tra mã, nhưng tôi thấy không có lý do gì nó không hoạt động .. :)


Tôi muốn lưu ý rằng việc trả lại chức năng thêm trang sẽ không hoạt động. Đó không phải là tên của trang, nó là định danh màn hình phức tạp hơn đi vào $hook_suffixtoàn cầu. Ngoài ra, bạn có thể chuyển mảng kết hợp của công cụ làm đối số đầu tiên add_query_arg()thay vì gọi nhiều lần.
Rarst

Tôi không chắc chắn tôi theo dõi Rarst, chính xác thì nó không hoạt động là gì? Nếu mã sẽ không làm những gì nó dự định làm thì tôi sẽ xóa câu trả lời (mã không hoạt động phục vụ mục đích nhỏ).
t31os

Tôi có nghĩa là phần này $my_hook = add_xxxx_pagetrong các nhận xét mã, $my_hooksẽ không hoạt động thay thế $plugin_pagevì chúng là những thứ khác nhau. Các mã chính là âm thanh và làm việc.
Hết

Tôi không bao giờ đề xuất nó như một sự thay thế, chỉ là bạn có thể tham khảo $my_hookthay cho var đó, bởi vì chúng thường giữ cùng một giá trị. Không chắc chúng khác nhau như thế nào, hãy xem cách $plugin_pageđiền (wp-admin / admin.php), sau đó hãy xem cách tạo ra giá trị menu đó.
t31os

1
Đúng vậy, xin lỗi, khởi đầu sớm, não vẫn chưa khởi động được ... lol .. hãy quên những bình luận trước đây của tôi ..;) Tôi sẽ xóa phần đó của câu trả lời.
t31os

2

Đã giải quyết!

Cố gắng làm quá nhiều thứ khi một điều kiện đơn giản sẽ thực hiện thủ thuật trong hàm chính được gọi từ trang.

function wpsc_display_products_seo(){

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

}

Tại sao bạn không đăng tất cả các mã?
Francisco Corrales Morales
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.