web-dev-qa-db-ja.com

'if/else'ステートメントで役職をテストしてもコンテンツが返されない

私はaboutページの特定の固定投稿をテストしています、私は最善の方法は投稿タイトル(?)をテストすることであると思いました。

これが私のコードです、何が問題なのですか?

<?php
if (is_page()) {
  $cat=get_cat_ID($post->post_title);
  $posts = get_posts ("cat=$cat&showposts=35");

  if ($posts) {
    foreach ($posts as $post):
      setup_postdata($post); ?>
        <div class="clear"></div>
            <h3><?php the_title(); ?></h3>
        <div class="clear"></div>

<?php    if ($post->post_title('skillset')) {
            echo '<div class="content">';
                the_content('');
            echo '</div>'; 
    }
        else{
        the_content('');
        }
                endforeach;
  }
}
?>
2
Max Chandler

まず第一に、$postはWordPressコアの1つである グローバル変数 ですので、触れないようにするか、 reset にしてください。/foreachループの後。

setup_postdata() を使用すると、上記のスニペットのthe_title()のように、 template tags を使用できます。ただし、それが使用されるループの後には、必ず wp_reset_postdata() のようにそれを続ける必要があります。

$postobject です。オブジェクトは、プロパティやメソッドを含むクラスのインスタンス、変数や関数のOOPに相当するものです。

あなたがしたように投稿のタイトルをテストしようとすることによって、

if($post->post_title('skillset'))

あなたはpost_titleをあたかもそれがメソッドであるかのように扱い、ブール値を返すのと同様に問題のタイトルを引数として与えることができます。しかしそれはプロパティであり、それ自体があなたがアクセスできる値を含んでいます - そしてそれはそれです。

この値は、他の値に対してテストされる必要があります。それゆえ

if( 'skillset' === $post->post_title ) {
    // your conditional operation
}

タイトルの作業テストになります。

基本的にその行はあなたの肩書きの質問に対する答えです。しかし、あなたは自分のコードの何が悪いのか尋ねたので、showposts引数もしばらくの間非推奨になりました。代わりにnumberpostsを使用してください。

$postを使う上での最初のポイントをもう一度見てみましょう。テンプレートタグの代わりにプロパティを直接参照する場合は、グローバルの$postを上書きする必要はありません。

$wpse67413_posts = get_posts();

foreach( $wpse67413_posts as $wpse67413_post ) {
     echo '<h3>' . $wpse67413_post->post_title . '</h3>';
}

世界に触れることなく同様に機能します。それは完全性のためだけのものです。

そして副次的な注意として、なぜあなたはそのような小さなスペースでそんなに多くのphp開始タグと終了タグを使うのですか?ほとんど修辞的な質問:それは意味をなさない。

最後に、これを実行しますか?

$cat=get_cat_ID($post->post_title);

?これは、訪問者がいるページのタイトルとまったく同じ名前のカテゴリの投稿を取得する場合にのみ意味があります。答えが肯定的であると仮定すると、これはあなたの上のスニペットの完全な訂正です。

global $post;

if( is_page() ) {
    $wpse67413_posts = get_posts( array(
        cat => get_cat_ID($post->post_title),
        numberposts => 35
    ));

    if( $wpse67413_posts ) {
        foreach ( $wpse67413_posts as $post ) {
            setup_postdata($post);

            echo '<div class="clear"></div>' .
                '<h3>' get_the_title() . '</h3>' .
                '<div class="clear"></div>';

            if( 'skillset' === $post->post_title ) {
                echo '<div class="content">' . get_the_content() . '</div>'; 
            } else {
                the_content();
            }
        }
    }

    wp_reset_postdata();
}
2
Johannes Pille

最善の方法は、タイトルではなくIDを検索することです。それであなたのifは次のようになります。

if ($post->ID === 123)

123はあなたが "フィルタ"したい投稿のIDです。

0
Miha Rekar