2

次のような$wpdb->get_resultsクエリがあります。

"SELECT *
 FROM $wpdb->posts
 WHERE post_author = $current_user_id
   AND post_status = 'publish'
   AND post_type = 'event'
 ORDER BY post_date DESC"

これは次のように解釈されます。

SELECT *
FROM wp_posts
WHERE post_author = 5
  AND post_status = 'publish'
  AND post_type = 'event'
ORDER BY post_date DESC

phpmyadminを介してデータベースでその正確なクエリを実行すると、完全に正常な結果が返されます。ただし、wordpressの実装では、何も返されません。AND post_type = 'event'壊れそうな部分に絞り込みました。それをクエリから外すと、問題なく結果が返されます

誰もが理由を知っていますか?

ありがとう!

4

4 に答える 4

3

私の理解では、ワードプレスには 5 つの主要な投稿タイプがあります: (投稿、ページ、添付ファイル、リビジョン、および nav_menu_item )

「イベント」の post_type を検索するには、register_post_type関数を使用してこのカスタム投稿タイプを登録する必要があります。

「イベント」というカスタム投稿タイプを作成する方法のサンプルを次に示します。

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'event',
        array(
            'labels' => array('name' => __( 'events' ),
                    'singular_name' => __( 'event' )),
            'public' => true,
        )
    );
}

注:register_post_type($post_type, $args)デフォルトで 2 つの引数を取ります。

$post_type- カスタム投稿タイプの名前です。

$args- 投稿タイプのデフォルトの動作を変更する任意の数の引数です。これは通常、配列である必要があります。

'labels'引数は、投稿タイプの名前を一般的かつ単数形で記述します。投稿タイプの一般的で特異なバージョンが必要な場合は、示されている方法を使用してください。それ以外の場合、デフォルトは指定した$post_type name名前になります。

'public'引数は、投稿タイプが公共の使用を意図しているかどうかを示します。

次のような多くのタグを使用せずに簡略化されたバージョンを作成することもできます。

add_action( 'init', 'create_post_type' );
function create_post_type() {
    register_post_type( 'event', array( 'public' => true, 'label' => 'events' ) );
}

create_post_typeまた、これは関数のカスタム名でありmy_super_cool_new_custom_original_post_type_creating_function、必要に応じてハハまたは何かを説明できることに注意してください。

私が使用した単純化されたバージョンlabelでは、単一の引数を取り、それが投稿タイプの一般的な名前です。投稿タイプの説明を追加したい場合は、名前の括弧内でそれを行い、次のように x のアンダースコアを 1 つ置き換えます。

add_action( 'init', 'create_post_type' );
register_post_type( 'event',
    array(
        'labels' => array('name' => _x( 'events' , 'post type general name' ),
                'singular_name' => _x( 'event' , 'post type singular name' )),
        'public' => true,
    )
);

注意事項: register_post_typeinit の前に使用しないでください。

ここで、これをすべて行っても post_type にアクセスできない場合は、public 引数を追加したことを確認してください。:)

乾杯

于 2012-07-03T20:37:28.613 に答える
1

以下のコードを試してください:

$get_post = $wpdb->query("SELECT * FROM wp_posts
WHERE post_author = ".$current_user_id."
  AND post_status = 'publish'
  AND post_type = 'event'
ORDER BY post_date DESC
"); 

また

$wpdb->get_results("SELECT *
 FROM $wpdb->posts
 WHERE post_author = $current_user_id
   AND post_status = 'publish'
   AND post_type = 'event'
 ORDER BY post_date DESC", OBJECT);
于 2012-07-01T09:26:32.800 に答える
1

私が抱えていた問題は、新しいラインから来ていました。なんらかの理由で、エディターまたはデータベースの構成が間違っていました。

クエリを同じ行に変更すると、機能し始めました。

于 2012-07-01T18:10:38.720 に答える
1

使ってみて post_type like %event%

WP_Query query_posts を介して同じことを実行できます。これは $wpdb を使用する必要がある複雑なクエリではありませんが、間違っている可能性があります。

于 2012-06-29T18:16:03.007 に答える