Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now
Sign InSign Up

PHP-J

PHP-J

PHP-J Navigation

  • Главная
  • Контакты
Поиск
Задать вопрос

Mobile menu

Close
Задать вопрос
  • Главная
  • Add group
  • User Profile
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Buy Points
Home/ Questions/Q 76214
Next
Answered
vnt
  • 0
vntУчитель
Asked: 20 марта, 20222022-03-20T01:26:25+03:00 2022-03-20T01:26:25+03:00In: Wordpress (Вопросы и ответы)

Упорядочить по мета-значению или дате?

  • 0

Вызывается настраиваемое поле, startDate но только для нескольких событий. Мне было интересно, не установлен ли он для сообщения, которое я мог бы использовать post_date для создания списка сообщений?

// if meta_key _postmeta.startDate isn't set get the rest by posts.post_date

query_posts(
    array(
        array(
            'posts_per_page' => 10,
            'meta_key' => 'startDate',
            'meta_value' => date('Y-m-d'),
            'meta_compare' => '<',
            'orderby' => 'meta_value',
            'order' => 'ASC'
        ), 
        array(
            'meta_key' => 'post_date',
            'meta_value' => date('Y-m-d'),
            'meta_compare' => '<'
        )
    )
);
date-timepost-metaquery-posts
  • 11 11 ответов
  • 25 просмотров
  • 0 Followers
  • 0
Ответить
Share
  • Facebook

    11 ответов

    • Лучшие оценки
    • Старые
    • Недавние
    • Случайные
    1. bainternet Гуру
      2022-03-20T01:27:01+03:00Добавлен ответ 20 марта, 2022 в 1:27 дп

      post_date является настраиваемым полем?

      • 0
      • Reply
      • vnt Учитель
        2022-03-20T01:27:42+03:00Replied to ответ 20 марта, 2022 в 1:27 дп

        я предполагаю, что это опубликованное поле wordpress по умолчанию, хотя может быть неправильно? В любом случае, я хотел бы использовать дату по умолчанию…

        • 0
        • Reply
      • bainternet Гуру
        2022-03-20T01:28:22+03:00Replied to ответ 20 марта, 2022 в 1:28 дп

        хорошо, так что это не метаполе, а в таблице сообщений

        • 0
        • Reply
      • tos Гуру
        2022-03-20T01:29:03+03:00Replied to ответ 20 марта, 2022 в 1:29 дп

        Исправлены ваши аргументы запроса, надеюсь, это не исказило то, что вы иллюстрировали, пожалуйста, не стесняйтесь вернуться, если это необходимо.

        • 0
        • Reply
      • vnt Учитель
        2022-03-20T01:29:47+03:00Replied to ответ 20 марта, 2022 в 1:29 дп

        ура t31os — отредактировал еще раз, чтобы было понятнее. Нужно, чтобы выбрать контент старше, чем СЕЙЧАС, используя startDate, и если startDate не был установлен, используйте дату публикации по умолчанию post_date.

        • 0
        • Reply
      • goldenapples Гуру
        2022-03-20T01:31:20+03:00Replied to ответ 20 марта, 2022 в 1:31 дп

        Очень элегантное решение, я бы не додумался до такого использования COALESCE. Я бы просто посоветовал не использовать префикс wp_ по умолчанию и вместо этого использовать {$wpdb->prefix}…

        • 0
        • Reply
      • janfabry Гуру
        2022-03-20T01:32:02+03:00Replied to ответ 20 марта, 2022 в 1:32 дп

        @goldenapples: Да, вы могли бы обобщить его, но он уже настолько специфичен для этого запроса (он испортит другие запросы с мета-частью), что я подумал, что в этом нет необходимости.

        • 0
        • Reply
      • vnt Учитель
        2022-03-20T01:32:44+03:00Replied to ответ 20 марта, 2022 в 1:32 дп

        Спасибо Ян — это откровение! Все еще разбираетесь с wordpress и задаетесь вопросом, где это называется на моей странице? И как мне его «отцепить»? т.е. // $theQuery… then ?

        • 0
        • Reply
      • janfabry Гуру
        2022-03-20T01:33:21+03:00Replied to ответ 20 марта, 2022 в 1:33 дп

        @daniel: Вы можете поместить функции в functions.php файл вашей темы. Затем прямо перед выполнением запроса вы размещаете две add_filter() строки. После запроса вы пишете remove_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' ); remove_filter( 'posts_orderby', 'wpse12814_posts_orderby' );, чтобы удалить их снова.

        • 0
        • Reply
      • vnt Учитель
        2022-03-20T01:34:04+03:00Replied to ответ 20 марта, 2022 в 1:34 дп

        ах — теперь все это имеет смысл и работает! Большое спасибо, Ян. Это будет полезно…

        • 0
        • Reply
    2. Лучший ответ
      janfabry Гуру
      2022-03-20T01:30:27+03:00Добавлен ответ 20 марта, 2022 в 1:30 дп

      Если вы можете объяснить это на SQL, вы можете запросить это! Есть три места, где мы хотим изменить запрос по умолчанию:

      SELECT wp_posts.*
      FROM wp_posts 
      INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
      WHERE 1=1
          AND wp_posts.post_type = 'post'
          AND (wp_posts.post_status = 'publish')
          AND wp_postmeta.meta_key = 'startDate'
          AND CAST(wp_postmeta.meta_value AS CHAR) < '2011-03-23'
      GROUP BY wp_posts.ID
      ORDER BY wp_postmeta.meta_value DESC
      LIMIT 0, 10
      
      • Соединение должно быть левым.
      • Где-предложение
      • Приказ

      Соединение и предложение where добавляются через функцию_get_meta_sql() . Вывод фильтруется, поэтому мы можем подключиться к нему:

      add_filter( 'get_meta_sql', 'wpse12814_get_meta_sql' );
      function wpse12814_get_meta_sql( $meta_sql )
      {
          // Move the `meta_key` comparison in the join so it can handle posts without this meta_key
          $meta_sql['join'] = " LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'startDate') ";
          $meta_sql['where'] = " AND (wp_postmeta.meta_value IS NULL OR wp_postmeta.meta_value < '" . date('Y-m-d') . "')";
          return $meta_sql;
      }
      

      Предложение заказа фильтруется через posts_orderby :

      add_filter( 'posts_orderby', 'wpse12814_posts_orderby' );
      function wpse12814_posts_orderby( $orderby )
      {
          $orderby = 'COALESCE(wp_postmeta.meta_value, wp_posts.post_date) ASC';
          return $orderby;
      }
      

      Это дает нам следующий SQL-запрос:

      SELECT wp_posts.*
      FROM wp_posts
      LEFT JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id AND wp_postmeta.meta_key = 'startDate')
      WHERE 1=1
          AND wp_posts.post_type = 'post'
          AND (wp_posts.post_status = 'publish')
          AND (wp_postmeta.meta_value IS NULL OR wp_postmeta.meta_value < '2011-03-23')
      GROUP BY wp_posts.ID
      ORDER BY COALESCE(wp_postmeta.meta_value, wp_posts.post_date) ASC
      LIMIT 0, 10
      

      Не забудьте отключить фильтры после выполнения запроса, иначе вы испортите и другие запросы. И, если возможно , вы должны не называть query_posts() себя, а изменить основной пост-запрос, который делает WordPress при настройке страницы.

      • 0
      • Reply

    Оставить ответ
    Отменить ответ

    You must login to add an answer.

    Forgot Password?

    Need An Account, Sign Up Here

    Sidebar

    Ask A Question

    Stats

    • Questions : 7k
    • Answers : 38k
    • Best Answers : 4k
    • Users : 5k
    • Popular
    • Answers
    • netconstructorcom

      Лучшая подборка кода для вашего файла functions.php [закрыто]

      • 97 Answers
    • MikeSchinkel

      Объективные рекомендации по разработке плагинов? [закрыто]

      • 83 Answers
    • EAMann

      Как легко перенести установку WordPress из стадии разработки в рабочую ...

      • 60 Answers
    • Karenfreva
      Karenfreva added an answer [url=https://sildenafilviashop.com/]viagra over the counter[/url] cialis vs viagra [url=https://tblsviagra.com/]cheap viagra online[/url]… 27 июня, 2022 at 11:19 дп
    • Karenfreva
      Karenfreva added an answer [url=https://casinoboba.com/]lucky creek[/url] uptown ace casino [url=https://casinowingames.com/]sloto cash casino[/url] andromeda [url=https://realmonetcasino.com/]ignition[/url]… 25 июня, 2022 at 12:21 пп
    • bainternet
      bainternet added an answer попробуй это://first get all agents $agents = new WP_Query(array('post_type' =>… 27 марта, 2022 at 6:12 пп

    Похожие вопросы

    • nmystic

      Как назначить файл по умолчанию в «Внешний вид > Редактор»?

      • 0 Answers
    • billeisenhauer

      Как показать полную публикацию на главной странице

      • 0 Answers
    • atticus

      Создание пользовательских запросов AJAX

      • 0 Answers

    Лучшие участники

    rarst

    rarst

    • 0 Questions
    • 5k Points
    Гуру
    bainternet

    bainternet

    • 0 Questions
    • 5k Points
    Гуру
    janfabry

    janfabry

    • 0 Questions
    • 3k Points
    Гуру

    Trending Tags

    categories comments custom-field custom-post-types custom-taxonomy customization functions images menus multisite pages permalinks php plugin-development plugin-recommendation plugins posts theme-development themes widgets wp-admin

    Footer

    © 2022

    Вставить/изменить ссылку

    Введите адрес назначения (URL)

    Или сделайте ссылку на существующий материал

      Поисковый запрос не задан. Показаны недавние элементы. Воспользуйтесь поиском или клавишами вверх/вниз, чтобы выбрать элемент.