0

クライアントが最新の Wordpress リリースで使用するカスタム テーマを作成しています。このテーマでは、ページの名前 (Contact、About など) が div#pageTitle でラップされます。この div には、サイトのセクションに基づいてクラス (「aboutTitle」など) も割り当てられます。CSS は、ページの名前の横にアイコンを表示するように記述されており、各クラスに異なるアイコンが割り当てられています。意図した結果は、サイトの 1 つのセクション内のすべてのページに、そのセクション専用のアイコンを表示することです。(例: すべての「About」ページには 1 つのアイコンを使用し、すべての「Articles」には別のアイコンを使用するなど)。

この特定のケースでは、「About Us」というトップレベルのページがあります。「About Us」の下にいくつかの子ページがあります。「About Us」とそのすべての子ページに 1 つの特定のアイコンを表示し、それを表示するためのクラスを、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. */
}
}

コメントを読んでそれに応じて行動せずにコピーして貼り付けると、意図したとおりに機能しないため、必ずコメントを読んでください。

また、それ以来、2番目の関数にさらに多くのスイッチを記述しましたが、ロジックがどのようにカスケードされるかについては非常に気難しいことがわかりました。新しいスイッチを書き込んでも正しく機能しない場合は、スイッチの順序を並べ替えてみてください。これまでのところ、最初にis_searchとis_404、次にis_page(およびその子)、次にcategory/tagとis_singleをアドレス指定するように配置する必要がありました。

他の人が役に立つかもしれない場合に備えて、私はジャスティンの許可を得てこれを投稿しました。YMMV。

于 2012-06-27T20:04:51.547 に答える