从 Wordpress 管理子菜单定向到过滤页面
Directing to filtered pages from Wordpress Admin Sub Menus
我想在我的 Wordpress 管理菜单中添加两个额外的子菜单项。我要连接的顶级菜单是由 WooCommerce 创建的 'Products' 菜单。
edit.php?post_type=product
我希望菜单项显示的内容可以通过按产品类别过滤产品来访问。例如
http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=manchester
我想出了一个可行的解决方案(如下)来执行此操作 - 但它并不优雅,因为当我觉得我应该能够简单地向 'menu slug' 添加一些内容时,它需要调用一个函数也许可变。
非常感谢任何想法。
// Hook into the Admin Menu
add_action( 'admin_menu', 'lnz_wp_adminmenu_addproductpages' );
// Add Product Categories
function lnz_wp_adminmenu_addproductpages() {
add_submenu_page( 'edit.php?post_type=product', 'Manchester Charities - Page', 'Manchester Charities- Menu', 'manage_options', 'product_cat_manchester', 'lnz_wp_adminmenu_redirectmanchester' );
add_submenu_page( 'edit.php?post_type=product', 'London Charities - Page', 'London Charities- Menu', 'manage_options', 'product_cat_london', 'lnz_wp_adminmenu_redirectlondon' );
}
// Create Redirects for relevant links
function lnz_wp_adminmenu_redirectmanchester() {
header('Location: http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=manchester');
exit();
}
function lnz_wp_adminmenu_redirectlondon() {
header('Location: http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=london');
exit();
}
据我所知,没有直接的方法可以使用 WP 挂钩或修改 global $submenu
...
之类的东西来实现此目的
可以通过 jQuery 修改子菜单项的 href
属性来完成:
add_action( 'admin_menu', function() {
add_submenu_page( 'edit.php?post_type=product', 'Manchester', 'Manchester', 'manage_options', 'cat_manchester', '__return_null' );
add_submenu_page( 'edit.php?post_type=product', 'London', 'London', 'manage_options', 'cat_london', '__return_null' );
});
add_action('admin_footer', function(){
?>
<script>
jQuery(document).ready( function($) {
var admin_url = 'http://dev3.benefacto.org/wp-admin/edit.php';
$('#menu-posts-product').find('a[href*="cat_manchester"]').attr('href',admin_url+'?s&post_type=product&product_cat=manchester');
$('#menu-posts-product').find('a[href*="cat_london"]').attr('href',admin_url+'?s&post_type=product&product_cat=london');
});
</script>
<?php
});
我想在我的 Wordpress 管理菜单中添加两个额外的子菜单项。我要连接的顶级菜单是由 WooCommerce 创建的 'Products' 菜单。
edit.php?post_type=product
我希望菜单项显示的内容可以通过按产品类别过滤产品来访问。例如
http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=manchester
我想出了一个可行的解决方案(如下)来执行此操作 - 但它并不优雅,因为当我觉得我应该能够简单地向 'menu slug' 添加一些内容时,它需要调用一个函数也许可变。
非常感谢任何想法。
// Hook into the Admin Menu
add_action( 'admin_menu', 'lnz_wp_adminmenu_addproductpages' );
// Add Product Categories
function lnz_wp_adminmenu_addproductpages() {
add_submenu_page( 'edit.php?post_type=product', 'Manchester Charities - Page', 'Manchester Charities- Menu', 'manage_options', 'product_cat_manchester', 'lnz_wp_adminmenu_redirectmanchester' );
add_submenu_page( 'edit.php?post_type=product', 'London Charities - Page', 'London Charities- Menu', 'manage_options', 'product_cat_london', 'lnz_wp_adminmenu_redirectlondon' );
}
// Create Redirects for relevant links
function lnz_wp_adminmenu_redirectmanchester() {
header('Location: http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=manchester');
exit();
}
function lnz_wp_adminmenu_redirectlondon() {
header('Location: http://dev3.benefacto.org/wp-admin/edit.php?s&post_type=product&product_cat=london');
exit();
}
据我所知,没有直接的方法可以使用 WP 挂钩或修改 global $submenu
...
可以通过 jQuery 修改子菜单项的 href
属性来完成:
add_action( 'admin_menu', function() {
add_submenu_page( 'edit.php?post_type=product', 'Manchester', 'Manchester', 'manage_options', 'cat_manchester', '__return_null' );
add_submenu_page( 'edit.php?post_type=product', 'London', 'London', 'manage_options', 'cat_london', '__return_null' );
});
add_action('admin_footer', function(){
?>
<script>
jQuery(document).ready( function($) {
var admin_url = 'http://dev3.benefacto.org/wp-admin/edit.php';
$('#menu-posts-product').find('a[href*="cat_manchester"]').attr('href',admin_url+'?s&post_type=product&product_cat=manchester');
$('#menu-posts-product').find('a[href*="cat_london"]').attr('href',admin_url+'?s&post_type=product&product_cat=london');
});
</script>
<?php
});