0

我正在为客户创建一个自定义主题,以便与最新的 Wordpress 版本一起使用。在这个主题中,页面的名称(Contact、About 等)包含在 div#pageTitle 中。此 div 还根据站点的部分分配了一个类(例如“aboutTitle”)。编写 CSS 以在页面名称旁边显示一个图标,并为每个类分配一个不同的图标。预期结果是站点单个部分中的所有页面都应显示专门用于该部分的图标。(例如:所有“关于”页面应该有一个图标,所有“文章”应该有一个不同的图标,等等)

在这种特殊情况下,有一个名为“About Us”的顶级页面。“关于我们”下有一些子页面。我希望“关于我们”及其所有子页面显示一个特定的图标,并且我希望基于写入 functions.php 的函数将用于显示它的类动态写入 html。(当然,其他页面、部分等也会有自己的关联图标。)

我写了我的想法可行的东西,它确实写在适当的类中……除了它为站点中的每一页都写了那个类!谁能解释我做错了什么,以及要进行哪些更正以达到预期的结果?

我在functions.php中包含的代码如下:

// Identify the post title of the parent page
function parentPostTitle() {
/* is it a page */
if( is_page() ) { 
global $post;
    /* Get an array of Ancestors and Parents if they exist */
$parents = get_post_ancestors( $post->ID );
    /* Get the top Level page->ID count base 1, array base 0 so -1 */ 
$id = ($parents) ? $parents[count($parents)-1]: $post->ID;
/* Get the parent and set the $parentPostTitle with the page title (post_title) */
    $parent = get_page( $id );
$parentPostTitle = $parent->post_title;
}
}


// Enable dynamic PageTitle Classes
function dynamicPageTitleClass() {
    if (is_page("About Us") || ($parentPostTitle="About Us")) {
            echo ' class="aboutTitle"';
}  elseif (is_page("Contact Us")) {
            echo ' class="contactTitle"';
    } elseif (in_category("articles")) {
            echo ' class="articlesTitle"';
    } elseif (in_category("blogs")) {
            echo ' class="blogTitle"';
    } elseif (in_category("videos")) {
            echo ' class="videosTitle"';
    } else {
            echo ' class=""';
    }
}

提前感谢您的时间和帮助。

4

1 回答 1

0

上面代码的以下修订版由 Justin Sangoi(IRL 熟人)编写,并被证明是成功的:

// Identify the post title of the parent page
function parentPostTitle(&$parentPostTitle) {
// function scope variables
$parentPostTitle = "";

// to be used for error messages.
$messages = "";

/* is it a page */
if( is_page() ) { 
    global $post;

    /* Get an array of Ancestors and Parents if they exist */
    $parents = get_post_ancestors( $post->ID );

    /* Get the top Level page->ID count base 1, array base 0 so -1 */ 
    $id = ($parents) ? $parents[count($parents)-1]: $post->ID;

    // Check if $id is null or empty, at this point, an error needs to be thrown if so.
    if (!empty($id)) {
        /* Get the parent and set the $parentPostTitle with the page title (post_title) */
        $parent = get_page( $id );
        $parentPostTitle = $parent->post_title;
    }
    else {
        $messages .= "ID is null or empty. <br />";
    }
}
else {
    $messages .= "Not a page. <br />"; 
            /* Remove the above line when finished debugging child page switches, or all switches for posts and archives will bork. */
}

/*
  In the code calling this function, if messages is empty or null, the function succeeded.
  If not, the function had some sort of error message.  This can be logged or echoed to 
  the screen for debugging purposes.
*/
return $messages;
}


// Enable dynamic PageTitle Classes
function dynamicPageTitleClass() {
// function scope variables
$title = "";
$messages = "";

// Get the parentTitle from the other function using the pass by reference.
$messages = parentPostTitle($title);

// if no error message
if (empty($messages)) {
    if (is_page("About Us") || ($title=="About Us")) {
        echo ' class="aboutTitle"';
    } 
    elseif (is_page("Contact Us")) {
        echo ' class="contactTitle"';
    } 
    elseif (in_category("articles")) {
        echo ' class="articlesTitle"';
    } 
    elseif (in_category("blogs")) {
        echo ' class="blogTitle"';
    } 
    elseif (in_category("videos")) {
        echo ' class="videosTitle"';
    } 
    else {
        echo ' class=""';
    }
}
else {
    // deal with the errors here (maybe return them or log them)
            echo $messages;  
            /* Check targeted html for error message is visual output is incorrect. */
}
}

请务必阅读评论,因为如果您在未阅读评论并采取相应措施的情况下复制和粘贴,这将无法按预期工作。

此外,我已经在第二个函数中编写了更多的开关,并且发现它对逻辑级联的方式非常挑剔。如果你写了一个新的开关并且它不能正常工作,请尝试重新排列开关的顺序。到目前为止,我不得不将它安排到第一个地址 is_search 和 is_404,然后是 is_page(及其子级),然后是类别/标签和 is_single。

我已经在贾斯汀的许可下发布了这个,以防其他人发现它有用。YMMV。

于 2012-06-27T20:04:51.547 回答