在WordPress中使用全局变量

时间:2015-01-14 04:14:22

标签: wordpress wordpress-theming

在我的header.php文件中,我需要动态设置正文ID,具体取决于当前使用的模板,无论有人正在查看的页面。

如果有人正在查看使用模板A的页面,则body标签应如下所示:

<body id="page1">

如果有人正在查看使用模板B的网页,则正文标记应如下所示:

<body id="page2">

在我的主题functions.php

中设置以下变量会有什么不利之处
$GLOBALS['my_current_body_id'];

然后在每个模板的开头我设置以下内容:

$GLOBALS['my_current_body_id'] = '1';

$GLOBALS['my_current_body_id'] = '2';

依赖于我需要如何设置和构造特定页面。

然后在我的header.php文件中,我执行以下操作:

<body id="page<?php echo $GLOBALS['my_current_body_id']?>">

我想知道使用这种方法是否存在问题,我可能会忽视它。

例如,如果有两个人在同一时间点击该网站,可能会出现混乱,还是特定于查看该网页的用户的$ GLOBALS [&#39; my_current_body_id&#39;]?

感谢。

2 个答案:

答案 0 :(得分:0)

这个解决方案怎么样:

PHP:

function body_tag() {
    global $post;
    $pageid = $post->ID; // Get page ID
    switch($pageid) {
        case '1':
        $bodyid = '1';
        break;

        case '2':
        $bodyid = '2';
        break;

        case '3':
        $bodyid = '3';
        break;

        default:
        $bodyid = '';
    }
    // Based on the page ID, set the appropriate bodyid and then return it.

    return $bodyid;
}

的header.php:

<body id="page<?php echo body_tag(); ?>">

我写的代码感觉有点简单,但是...... 如果用户A和用户B正在查看同一页面,他们将看到相同的模板。 但是,如果用户A正在查看ID为4的页面而用户B正在查看ID为5的页面,那么他们将看到不同的模板。 您是否正在尝试为A / B测试制作插件?

答案 1 :(得分:0)

以下是一些方法,具体取决于所需的内容:

1)抓住&#39; post_name&#39;页面的直接父级:

<?php
$page = $wp_query->post;
$parent_name = $wpdb->get_var("SELECT post_name FROM $wpdb->posts WHERE ID = '$page->post_parent;'");
?>

并显示父网页的名称:

<body id="<?php echo $parent_name; ?>">

2)要收集 top 父级的内容,即父级&lt;&gt;子级别的顶部,我们可以修改jpepper链接中的代码:

<?php
$current_page = $post->ID;
$parent = 1;

while($parent) {
$page_query = $wpdb->get_row("SELECT post_name, post_parent FROM $wpdb->posts WHERE ID = '$current_page'");
$parent = $current_page = $page_query->post_parent;
if(!$parent)
$parent_name = $page_query->post_name;
}
?>

然后使用与上面相同的方法显示名称。 为了更好的方法,你可以简单地在functions.php中使用它一个函数,并在header.php文件中使用它。

来源:https://wordpress.org/support/topic/dynamic-id-for-ltbodygt-and-subpages