私は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;
}
}
?>
まず第一に、$post
はWordPressコアの1つである グローバル変数 ですので、触れないようにするか、 reset にしてください。/foreach
ループの後。
setup_postdata()
を使用すると、上記のスニペットのthe_title()
のように、 template tags を使用できます。ただし、それが使用されるループの後には、必ず wp_reset_postdata()
のようにそれを続ける必要があります。
$post
も object です。オブジェクトは、プロパティやメソッドを含むクラスのインスタンス、変数や関数の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();
}
最善の方法は、タイトルではなくIDを検索することです。それであなたのifは次のようになります。
if ($post->ID === 123)
123はあなたが "フィルタ"したい投稿のIDです。