проблема с WordPress - PullRequest
       6

проблема с WordPress

1 голос
/ 13 августа 2010

EDIT:

вот мой файл, который выполняет запрос, может, что-то еще действует - http://pastebin.com/4Cw3xMEM


это работает как прямой запрос в SQLyog

SELECT * FROM wp_posts
WHERE post_status = 'publish' 
AND post_type = 'post'
AND YEAR(post_date)=2010
ORDER BY post_date DESC;

возвращает три сообщения за 2010 год но когда я пытаюсь запустить его через мой WordPress, он выкачивает все сообщения, независимо от даты

я знаю, что нужно сделать несколько вещей, чтобы он выбирал правильные таблицы и, насколько я могу понять, следующее «должно быть» в порядке

SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.post_status = 'publish' 
AND wposts.post_type = 'post'
AND YEAR(wposts.post_date)=2010
ORDER BY wposts.post_date DESC;

Я действительно не понимаю «посты». 'вообще, но он использует подобные вещи в примерах на WordPress Codex

конечная цель состоит в том, чтобы создать запрос для получения сообщений из определенного года и использовать его для отображения в WP групп сообщений в год

Я не могу найти ничего, что поможет объяснить, как правильно вызывать запросы, используя структуру wordpress

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

$wpdb->posts

я понятия не имею, для чего '->', я видел только то, что он используется в php для назначения частей массива в foreach

  • как мне заставить эту штуку работать?

Ответы [ 4 ]

2 голосов
/ 14 августа 2010

Вы делаете это слишком тяжело для себя, как я слишком хорошо знаю. Когда я начал работать с WordPress, я пришел к нему как опытный разработчик SQL, поэтому я хотел все кодировать на SQL. Оказывается, однако, что вам почти никогда не нужно использовать SQL с WordPress, потому что у него есть собственный API со встроенным URL-подобным языком запросов в комплекте с системой кэширования (система кэширования означает, что вам не нужно оптимизировать почти так же, как вы в противном случае может похудеть.)

Вот отдельный файл, который вы можете поместить в корень вашего сайта (назовите его test.php, может быть?), Чтобы вы могли проверить это, поиграть с опциями и убедиться, что он работает:

<?php

include "wp-load.php";

$year = 2010;

$query = new WP_Query("post_type=any&posts_per_page=-1&year={$year}");
echo "<h1>Year: {$year}</h1>";
echo '<ul>';
foreach($query->posts as $post) {
    echo "<li>{$post->post_title} [post_type={$post->post_type}]</li>";
}
echo '</ul>';

Язык запросов, который я упомянул выше, выглядит так:

post_type = любое & posts_per_page = -1 и год = 2010

Вы также можете запросить в виде массива, например (это действительно зависит только от вашего варианта использования и / или ваших предпочтений):

$query = new WP_Query(array(
    'post_type' => 'any',
    'posts_per_page' => -1,
    'year' => $year,
));

Для WP_Query() параметров запроса намного больше, чем три, которые я использовал выше. Вы можете найти лучшую документацию для этих параметров здесь:

Обратите внимание, что WP_Query() - это всего лишь один из способов запроса в WordPress. Также есть query_posts(), get_posts(), и вы можете взаимодействовать с запросом также во время перехватов .

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

Надеюсь, это помогло.

-Mike

P.S. Хотите узнать больше информации по запросу WordPress? Позвольте мне предложить вам задать вопросы на Ответах WordPress , когда он откроется для полной общедоступной бета-версии через неделю (Ответы WordPress от StackExchange , те же люди, что и StackOverflow.) скорее всего, вы получите лучшие ответы для WordPress, чем здесь, потому что этот сайт будет заполнен экспертами WordPress, в отличие от универсалов (и в остальном чрезвычайно знающих людей) здесь.

1 голос
/ 13 августа 2010

Если вам подходит более поздний формат, используйте его вместо этого.Что касается:

$wpdb->posts

-> используется со свойствами и методами объекта.В вышеприведенном случае $wpdb - это объект, который должен быть создан с помощью ключевого слова new посредством wordpress где-нибудь, а posts - это свойство объекта $wpdb, который получает все сообщения из базы данных.

Является ли член класса методом или свойством, определяется с помощью конечных скобок ().Например:

$wpdb->posts    // property
$wpdb->post()   // method

Возможно, вы захотите взглянуть на основы ООП PHP:

0 голосов
/ 13 августа 2010

$ wpdb - это глобальный объект, используемый в WordPress для хранения вещей, связанных с базой данных WordPress.Часть -> posts означает получение элемента 'posts' этого объекта (или, другими словами, публичной переменной).Я могу только предположить, что именно способ, которым вы вызываете запрос, вызывает проблему.Вы должны использовать что-то вроде ...

$querystr = "SELECT wposts.* 
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
WHERE wposts.post_status = 'publish' 
AND wposts.post_type = 'post'
AND YEAR(wposts.post_date)=2010
ORDER BY wposts.post_date DESC";
$results = $wpdb->get_results($querystr, OBJECT);

foreach ($results as $r) {
    echo $r->title; // echo out variables from table
}
0 голосов
/ 13 августа 2010
$wpdb->posts

это означает, что $wpdb является объектом, и вы пытаетесь получить доступ к свойствам записей объекта.

Я ничего не знаю о WordPress, но, если вы хотите использовать этот синтаксисв строке (разделенной ") вы должны использовать

${wpdb->posts}

, поэтому попробуйте

$query = "SELECT wposts.* 
          FROM ${wpdb->posts} wposts, ${wpdb->postmeta} wpostmeta
          WHERE wposts.post_status = 'publish' 
          AND wposts.post_type = 'post'
          AND YEAR(wposts.post_date)=2010
          ORDER BY wposts.post_date DESC;";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...