我正在为客户端创建一个自定义主题,以便与最新的Wordpress版本一起使用。在这个主题中,页面的名称(联系人,关于等)包含在div#pageTitle中。此div还根据站点的部分分配了一个类(例如“aboutTitle”)。编写CSS是为了在页面名称旁边显示一个图标,并为每个类分配一个不同的图标。预期的结果是网站的单个部分中的所有页面都应显示专门针对该部分的图标。 (示例:所有“关于”页面应该有一个图标,所有“文章”应该有不同的图标等。)
在这种特殊情况下,有一个名为“关于我们”的顶级页面。 “关于我们”下有一些子页面。我希望“关于我们”及其所有子页面显示一个特定的图标,我希望该类能够根据写入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=""';
}
}
提前感谢您的时间和帮助。
答案 0 :(得分: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(及其子节点),然后是category / tag和is_single。
我已经在贾斯汀的允许下发布了此内容,以防其他人认为有用。 YMMV。