1

'...'タイトルが 40 文字を超える場合に を追加するようにブレッドクラム スクリプトを変更しています。その部分はうまくいきましたが、うまくいかないのは、この大規模なスクリプトにネストして、長さが 40 文字未満の場合にそのままにしておく方法です。

ここでも他に必要ですか?orifなしで複数の があるスクリプトに遭遇したことはありませんelseelseif

    } elseif ( is_single() && !is_attachment() ) {
      if ( get_post_type() != 'post' ) {
        $post_type = get_post_type_object(get_post_type());
        $slug = $post_type->rewrite;
        echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';
        if ($showCurrent == 1) echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after;
      } else {
        $cat = get_the_category(); $cat = $cat[0];
        $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
        if ($showCurrent == 0) $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
        echo $cats;
        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
      } elseif {
        if (($showCurrent == 1) && (strlen($post->post_title) < 40)) echo $before . get_the_title() . $after;

      }
4

3 に答える 3

0

最後elseifはすでにelseが前に付いているため、無効です。

また、if/if-elseステートメントの標準化された記述方法を使用する習慣を身に付ける必要があるとも言えます。中括弧のないifステートメントと中括弧のあるifステートメントがあるため、コードが混乱しているように見えます。たとえば、すべての場合に中括弧を使用し、それらに適切なインデントを使用する場合、else条件に従うという問題は、非常に明確に発見できます。

例として:

if ( get_post_type() != 'post' ) {
    $post_type = get_post_type_object(get_post_type());
    $slug = $post_type->rewrite;
    echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';
    if ($showCurrent == 1) {
         echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after;
    }
} else {
    $cat = get_the_category(); $cat = $cat[0];
    $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
    if ($showCurrent == 0) {
        $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
    }
    echo $cats;
    if (($showCurrent == 1) && (strlen($post->post_title) > 40)) {
        echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
    }
} else if {
    if (($showCurrent == 1) && (strlen($post->post_title) < 40)) {
        echo $before . get_the_title() . $after;
    }
}

私にとって、これは少し冗長ですが、読むのがはるかに明確です。最後のelse-ifが意味をなさないこともすぐにわかります。

ちなみに、ロジックを修正するときは、文字列の長さが正確に40文字の場合にどうなるかを考慮してください。

于 2012-10-24T19:54:13.927 に答える
0

中かっこが欠落している可能性があります

} elseif ( is_single() && !is_attachment() ) {
      if ( get_post_type() != 'post' ) {
        $post_type = get_post_type_object(get_post_type());
        $slug = $post_type->rewrite;
        echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';

        if ($showCurrent == 1) { echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after; }

      } else {
        $cat = get_the_category(); $cat = $cat[0];
        $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');

        if ($showCurrent == 0) { $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
        echo $cats; }

        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) { echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; }

      } elseif {

        if (($showCurrent == 1) && (strlen($post->post_title) < 40)) { echo $before . get_the_title() . $after; }

      }
于 2012-10-24T19:57:16.050 に答える
0

ロジックは明確ではありません。長さがちょうど 40 文字のケースを処理していません。

同じ式を 1 回だけ評価する必要があるように、コードを構造化してください。おそらく、これはあなたが意図したものですか?

} elseif ( is_single() && !is_attachment() ) {
  if ( get_post_type() != 'post' ) {
   ...
  } else {
    ...
    echo $cats;

    if (($showCurrent == 1) && (strlen($post->post_title) > 40)) 
      echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
    } 
    else {
      echo $before . get_the_title() . $after;
    }
  }
}  // Close the elseif
于 2012-10-24T20:02:36.517 に答える