wordpress - 在管理员中通过 acf 字段过滤自定义帖子时出错

标签 wordpress advanced-custom-fields

我正在通过 acf 字段“issue_year”为自定义帖子“magazine”添加过滤器。我创建了下拉菜单并过滤了帖子,但出现了以下错误。

错误:

WordPress database error Not unique table/alias: 'wp_postmeta' for query SELECT SQL_CALC_FOUND_ROWS DISTINCT wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) LEFT JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id  WHERE 1=1  AND ( 
  ( wp_postmeta.meta_key = 'issue_year' AND wp_postmeta.meta_value = '2017' )
) AND wp_posts.post_type = 'magazine' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'future' OR wp_posts.post_status = 'draft' OR wp_posts.post_status = 'pending' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 20 made by WP_List_Table->display, WP_List_Table->display_tablenav, WP_Posts_List_Table->extra_tablenav, do_action('manage_posts_extra_tablenav'), WP_Hook->do_action, WP_Hook->apply_filters, WPSEO_Link_Columns->count_objects, WPSEO_Link_Columns->set_count_objects, WP_Query->get_posts

代码: 对于下拉列表:

add_action('restrict_manage_posts', 'filter_experts_by_issue_year');
function filter_experts_by_issue_year() {
    $post_type = 'magazine';
    global $wpdb;
    $query = $wpdb->prepare('
        SELECT DISTINCT pm.meta_value FROM %1$s pm
        LEFT JOIN %2$s p ON p.ID = pm.post_id
        WHERE pm.meta_key = "%3$s" 
        AND p.post_status = "%4$s" 
        AND p.post_type = "%5$s"
        ORDER BY "%3$s"',
        $wpdb->postmeta,
        $wpdb->posts,
        'issue_year',
        'publish',
        $post_type
    );
    $results = $wpdb->get_col($query);
    if(empty($results))
        return;

    /** Grab all of the options that should be shown */
    $options[] = sprintf('<option value="-1">%1$s</option>', __('Issue Year', 'your-text-domain'));
    foreach($results as $result) :
        $options[] = sprintf('<option value="%1$s">%2$s</option>', esc_attr($result), $result);
    endforeach;

    /** Output the dropdown menu */
    echo '<select class="" id="issue_year" name="issue_year">';
    echo join("\n", $options);
    echo '</select>';
}

过滤器:

add_filter( 'parse_query', 'prefix_magazine_filter' );
function  prefix_magazine_filter($query) {
    global $pagenow;
    $current_page = isset( $_GET['post_type'] ) ? $_GET['post_type'] : '';

    if ( is_admin() && 'magazine' == $current_page && 'edit.php' == $pagenow && isset( $_GET['issue_year'] ) && $_GET['issue_year'] != '-1') {
        $query->query_vars['meta_key'] = 'issue_year';
        $query->query_vars['meta_value'] = $_GET['issue_year'];
        $query->query_vars['compare'] = '=';

    }
}

wp版本:4.9.1 acf 专业版:5.6.5

最佳答案

在我看来你的order by子句有错误

使用此代码

$query = $wpdb->prepare('
    SELECT DISTINCT pm.meta_value 
    FROM $wpdb->postmeta pm
    LEFT JOIN $wpdb->posts p
    ON p.ID = pm.post_id
    WHERE pm.meta_key = "%s" 
    AND p.post_status = "%s" 
    AND p.post_type = "%s"
    ORDER BY pm.meta_value',
    'issue_year',
    'publish',
     $post_type
);

关于wordpress - 在管理员中通过 acf 字段过滤自定义帖子时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48258510/

相关文章:

javascript - Cuffon 未定义。 IE7 和 IE8 上的 JavaScript 错误

php - 高级自定义字段中继器图像标题

php - WordPress 高级自定义字段库不返回数组

php - WordPress get_posts() 比较meta_query 中的时间戳问题

Wordpress Gravity Forms 获取列表值

php - Wordpress - 将自定义字段添加到以编程方式创建的自定义帖子中

php - 如何在wordpress中获取所有帖子ID

jquery - WordPress 重力形式 多个表单 多次提交

php - 如何计算/显示 wordpress 中的在线用户数

php - ACF get_field() 返回空