如何将数字id传递给页面模板?

时间:2016-04-04 作者:Alexander Farber

我正在使用Wordpress安装Wordpress Social Login 作为基于HTML5的棋盘游戏的“画布”。

在文件中/wp-content/themes/twentythirteen-child/front-page.php 我得到数字ID 查看用户的(返回者wp_get_current_user() method) 然后从$wpdb->prefix . \'wslusersprofiles\' 表-并可以在我的网站首页显示该用户的游戏和得分。

My question please: 在游戏板下面,我想显示其他玩家的列表(可能是“前10名”或所有玩家的列表DataTables jQuery plugin).

我想有一个像这样的链接/player/12345/player-12345 对于列表中的每个玩家-这样就可以单击它,然后显示该玩家的名字和分数。

我一直在读Theme Handbook 看着Wordpress Template Hierarchy 只是不明白-我的用户配置文件的路径应该是什么(类似于/wp-content/themes/twentythirteen-child/page-templates/player.php?) 尤其是如何传递数字id部分(12345 在上述示例中)到该文件?

UPDATE:

我已添加functions.php and page-templates/page-player.php 正如Jevuska在其非常详细的回答中所建议的那样。

不幸的是,我在尝试打开时遇到404错误/player-1 (那将是我作为管理员)或/player-12345 - 即使我在中无条件刷新重写规则wp_loaded

我在CentOS 6.7 Linux上使用PHP 5.3

1 个回复
最合适的回答,由SO网友:Jevuska 整理而成

关于WordPresspost paged, 我会使用/player-12345 或作为url特定页面的其他结构,而不是/player/12345.

如何为页面创建新的url结构创建其他url结构,您需要WP_Rewrite, 有几个过滤器可以使用函数启动。对于Page, 您可以筛选page_rewrite_rules. 请参见文档中的示例代码https://codex.wordpress.org/Class_Reference/WP_Rewrite#Examples. 请注意这些文档中的注释。

这是与url结构相关的示例代码/player-12345. 确保您的页面slug是player. 在主题文件中添加此代码functions.php 或者在插件中。

add_filter( \'page_rewrite_rules\',\'my_insert_rewrite_rules\' );
add_filter( \'query_vars\',\'my_insert_query_vars\' );
add_action( \'wp_loaded\',\'my_flush_rules\' );

// flush_rules() if our rules are not yet included
function my_flush_rules()
{
    $rules = get_option( \'rewrite_rules\' );
    
    if ( ! isset( $rules[\'(player)-(\\d*)$\'] ) )
    {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }
}

// Adding a new rule page slug with number
function my_insert_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules[\'(player)-(\\d*)$\'] = \'index.php?pagename=$matches[1]&player_id=$matches[2]\';
    
    return $newrules + $rules; //combine all page rules
}

// Adding the player_id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
    array_push( $vars, \'player_id\' );
    return $vars;
}
现在您有了用户id为的url结构页面/player-12345, 基于数据库在首页中创建页面链接。您可以使用get_page_link 并与您的列表用户id相结合。

创建页面或自定义页面,然后如何在前端显示我们的用户数据?

Create new page (带弹头的玩家player 从admin),它将使用默认值page.php 模板,您可以使用它。但如果您需要在不同的布局中创建新的文件主题page-{slug}.php (没有模板名称)是我首选的方法,在您的情况下page-player.php.

从中创建重复代码page.php, 并根据需要进行定制。您不必创建自定义wp_query 内有回路。只需使用普通循环wp_query 按原样。

因为我们有额外的查询参数页是player_id 具有用户ID值,具有get_query_var( \'player_id\' ) 它使检索用户数据变得容易。

这是显示用户数据的简单代码,我只使用用户查询,您可以使用新表中的数据实现。筛选the_content 具有检索用户数据和保留原始页面内容的功能(您也可以覆盖)。外接程序functions.php.

add_filter( \'the_content\', \'my_the_content_filter\' );
/**
 * Filter page content
 * by filter the_content
 * Use condition statement is_page( slug ) with get_query_var( \'player_id\' )
 * 
 * @param  string $content Oringinal text
 * @return string New Content with or without original text
 */
function my_the_content_filter( $content )
{
    if ( is_page( \'player\' ) && ! empty( get_query_var( \'player_id\' ) ) )
    {
        $player_id = intval( get_query_var( \'player_id\' ) );

        /**
         * Add user info only ( overwrite page content )
           $content = _my_function_player_info( $player_id );
         */

        /**
         * Include your page content and additional content of user info
         */
        $content .= _my_function_player_info( $player_id );
    }
    return $content;
}

/**
 * Set your user data, html, table, etc
 * @see param https://developer.wordpress.org/reference/functions/get_user_by/
 * @param  integer $player_id User ID
 * @return string User data front-end
 */
function _my_function_player_info( $player_id )
{
    ob_start();
    $user = get_user_by( \'id\', intval( $player_id ) );
    ?>
    <table>
        <tr>
            <td><?php _e( \'Name\', \'text_domain\' ); ?></td>
            <td><?php echo $user->first_name . \' \' . $user->last_name; ?></td>
        </tr>
    </table>
    <?php
    $html = ob_get_clean();
    return $html;
}
其他筛选器,如loop_startloop_end 要在内容循环之前或之后显示用户数据,请使用echo 在输出中,或直接在自定义页面中实现您的功能。只要根据需要滥用此代码即可。

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c