admin管理员组文章数量:1122846
I am developing a simple lean and mean custom plugin which has the purpose to list records from some database tables. Goal is to list data via url /teams/{category}/{id}.
I've created a basic plugin and a "teams" page and added a short code to fetch a list of teams:
// upcoming events shortcode
function test_teams_overview() {
$output = '';
global $wpdb;
$teams = $wpdb->get_results('SELECT * FROM Teams');
if(count($teams)){
$output .= '<ul>';
foreach($teams as $team){
$output .= '<li><a href="/' . $team->url . '">' . $team->team . '</a></li>';
}
$output .= '</ul>';
}
else{
$output .= '<p>No teams :( </p>';
}
return $output;
}
add_shortcode('teams', 'test_teams_overview');
This works, but I am stuck on the next part, which action/hook to use to list dynamic subpages. Clicking in the above example leads to an URL like /teams/alpha. By adding an custom hook I can get control over the URI requested, however I can't get the output "injected" in the template/page (gives a 404), this is what I have:
add_action( 'init', 'teams_custom_router' );
function teams_custom_router( $query ) {
global $wp_query;
exit(print_r($wp_query,1));
}
The teams_custom_router() can't help me any further as $wp_query remains empty. I can't get it to work to inject a custom/view template listing database records based upon the URI. I've also worked with taxonomy and custom rewrite rules, but no working proof of concept so far.
Question
- How can I create a setup whereas I can call my plugin via a shortcode (e.g. [teams]) which subsequently lists records from separate db tables via a dynamic URL (/teams/{category}/{id}/{more params}
Unfortunately I can't find any snippet or good reference (plugin example) for this use case. Anyone some clever ideas?
Thanks!
I am developing a simple lean and mean custom plugin which has the purpose to list records from some database tables. Goal is to list data via url /teams/{category}/{id}.
I've created a basic plugin and a "teams" page and added a short code to fetch a list of teams:
// upcoming events shortcode
function test_teams_overview() {
$output = '';
global $wpdb;
$teams = $wpdb->get_results('SELECT * FROM Teams');
if(count($teams)){
$output .= '<ul>';
foreach($teams as $team){
$output .= '<li><a href="/' . $team->url . '">' . $team->team . '</a></li>';
}
$output .= '</ul>';
}
else{
$output .= '<p>No teams :( </p>';
}
return $output;
}
add_shortcode('teams', 'test_teams_overview');
This works, but I am stuck on the next part, which action/hook to use to list dynamic subpages. Clicking in the above example leads to an URL like /teams/alpha. By adding an custom hook I can get control over the URI requested, however I can't get the output "injected" in the template/page (gives a 404), this is what I have:
add_action( 'init', 'teams_custom_router' );
function teams_custom_router( $query ) {
global $wp_query;
exit(print_r($wp_query,1));
}
The teams_custom_router() can't help me any further as $wp_query remains empty. I can't get it to work to inject a custom/view template listing database records based upon the URI. I've also worked with taxonomy and custom rewrite rules, but no working proof of concept so far.
Question
- How can I create a setup whereas I can call my plugin via a shortcode (e.g. [teams]) which subsequently lists records from separate db tables via a dynamic URL (/teams/{category}/{id}/{more params}
Unfortunately I can't find any snippet or good reference (plugin example) for this use case. Anyone some clever ideas?
Thanks!
Share Improve this question asked Mar 18, 2023 at 16:31 FlapoorFlapoor 111 bronze badge1 Answer
Reset to default 1A basic implementation could go like this:
Setup public query variables
This lets you fetch these later through get_query_var()
add_filter( 'query_vars', function( $vars ) {
$vars[] = 'team_category';
$vars[] = 'team_id';
return $vars;
} );
Add a rewrite rule
This is responsible for turning a url like /team/allstars/999
into a format WordPress can handle. Make sure to replace your_page_id
with the actual ID of your teams page.
add_action( 'init', function() {
add_rewrite_rule( '^teams/([^/]*)/([^/]*)/?', 'index.php?page_id=your_page_id&team_category=$matches[1]&team_id=$matches[2]', 'top' );
} );
Add your shortcode
Just an example of grabbing and outputting your query variables.
add_shortcode( 'teams', function() {
$team_category = get_query_var( 'team_category' );
$team_id = get_query_var( 'team_id' );
return "{$team_category}: {$team_id}";
} );
Heads up: when tinkering with rewrite rules, make sure to trigger a permalink refresh by clicking Save Changes in your Settings → Permalinks screen (without making any changes, even).
本文标签: phpCreate a custom plugin with dynamic child pages listing database records
版权声明:本文标题:php - Create a custom plugin with dynamic child pages listing database records 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736295988a1929688.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论