has_post_format () vs. get_post_format ()


10

Я щойно вступив у концепцію форматів публікацій і цікавився, чому два з 3-х функцій з формату поста "API" пропонують абсолютно однаковий функціонал. Розглянемо наступні два поняття (А проти В):

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post();

        // A) has_post_format
        if ( has_post_format('format') )
        {
            the_excerpt(); // some special formating
        }

        // VERSUS:

        // B) 
        if ( get_post_format( $GLOBALS['post']->ID ) == 'format' )
        {
            the_excerpt(); // some special formating
        }

    } // endwhile;
} // endif;

Не могли б хтось пояснити мені, чому існують ці дві функції, а не лише колишня. get_post_format? Якщо ви можете запропонувати мені кілька прикладів ситуацій, коли один не здатний на те, що може виконувати інша функція, я був би дуже радий і поставив це +1.

Відповіді:


12

Редагувати

has_post_format()потрібен рядок, $formatяк перший параметр; що означає, що його можна використовувати лише для тестування явних типів постформату:

if ( has_post_format( $format ) {
    // Current post has the $format post format;
    // do something
}

Щоб визначити, чи має публікація будь-який формат публікації, скористайтеся get_post_format(), яке повернеться, falseякщо поточній публікації не призначений формат публікації:

if ( false != get_post_format() ) {
    // Current post has a post format;
    // do something
}

Зауважте, що "стандарт" - це не фактичний пост-формат, а скоріше термін заповнення для публікацій, яким не призначений формат публікації. Внутрішньо WordPress повертається, falseа не post-format-standard, тож для запиту до "стандартного" типу постформату ви просто використали б if ( false == get_post_format() ).

Оригінал

has_post_format() повертає значення BOOLEAN, що корисно для умов, наприклад:

if ( ! has_post_format() ) {
     // I'm a standard-format post; do something
}

або

if ( has_post_format( array( 'gallery', 'image' ) ) {
     // I'm a gallery or image format post; do something
}

get_post_format()повертає рядкове значення поточного типу формату публікації, що корисно кількома способами. Один з найпотужніших - викликати різні файли шаблону на основі формату публікації, наприклад:

get_template_part( 'entry', get_post_format() )

Що включатиме, наприклад, "entry-aside.php" для формату вбік, або "entry.php" для стандартного формату.


Це get_template_partдійсно розумно!
кайзер

Беннет - повністю забув позначити свій А як рішення. Btw: Усі як були схвалені :)
кайзер

1
if ( ! has_post_format() ) {}повертає попередження (як мінімум на 3.5-RC1), оскільки 1-й (необхідний) аргумент відсутній. codex.wordpress.org/Function_Reference/has_post_format
glueckpress

4

Наступна частина є невірною, я створив квиток, щоб подати запит на це покращення.

has_post_format()є більш гнучким, оскільки він будує has_term(), який спирається на is_object_in_term(). Це означає, що ви можете передати масив форматів публікацій, і він повернеться, trueякщо повідомлення мають один із цих форматів.

if ( has_post_format( array( 'aside', 'video' ) ) {
    // It's an aside or a video
}

У первинному специфікаційному талоні вже згадувалось і те, get_post_format()і has_post_format(), можливо, воно базується на системі таксономії, яка також має обидві функції


О, безумовно, це додатково розширює те, що ви можете зробити тут, дозволяючи вам перевірити конкретні формати, щоб отримати свою правдиву / хибну відповідь.
Дрю Гурлі

Змушує мене думати, чи було б сенсом просто використовувати is_object_in_term()функцію замість цього.
кайзер

1
@Jan Fabry has_post_format()очікує рядок як перший параметр. Не вдасться масив.
фуксія

1
@toscho: Дарн, я знав, що повинен був перевірити це, а не просто поглядати на код. Тоді це не відповідає іншим has_*функціям - я створив на нього квиток .
Ян Фабрі

2
@Jan Fabry Це дуже класний спосіб виправити свою відповідь. :)
fuxia

3

Простий, has_post_format () повертає значення true / false (булеве) значення, корисне в операторах IF, тоді як get_post_format () повертає формат публікації, якщо такий існує, і, ймовірно, NULL або false, якщо його немає. Використання булевих значень - це хороший чистий спосіб переконатися, що ваші умови завжди поводяться так, як ви очікували, а функція has_post_format () дозволяє отримати легкі короткі умови:

if ( has_post_format() ) {
  //yes we do
} else {
  //no we do not
}

if ( !has_post_format() ) {
  //no we do not
} else {
  //yes we do
}

Крім того, це просто узгоджується з іншими існуючими функціями WordPress. Незважаючи на те, що ваш варіант B виконує завдання, він вимагає трохи більше спеціалізованих знань, ніж, можливо, знайомий трохи вище середнього користувача WordPress.


Нагадує мені про get_adjacent_postта next_post_linkінше.
кайзер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.