Diese Antwort entspricht sehr genau dem, was ich tun möchte. Stattdessen möchte ich ein bestimmtes benutzerdefiniertes Feld angeben und ein Auswahlmenü der verfügbaren Werte anzeigen. Vielen Dank!
Diese Antwort entspricht sehr genau dem, was ich tun möchte. Stattdessen möchte ich ein bestimmtes benutzerdefiniertes Feld angeben und ein Auswahlmenü der verfügbaren Werte anzeigen. Vielen Dank!
Antworten:
Erstellen Sie einfach das Dropdown-Menü mit den gewünschten Meta-Werten, und fangen Sie dann die Übermittlung des Filters ab. Ändern Sie einfach POST_TYPE
den Namen Ihres Beitragstyps und META_KEY
den Namen Ihres Metaschlüssels:
<?php
/*
Plugin Name: Admin Filter BY Custom Fields
Plugin URI: http://en.bainternet.info
Description: answer to http://wordpress.stackexchange.com/q/45436/2487
Version: 1.0
Author: Bainternet
Author URI: http://en.bainternet.info
*/
add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
/**
* First create the dropdown
* make sure to change POST_TYPE to the name of your custom post type
*
* @author Ohad Raz
*
* @return void
*/
function wpse45436_admin_posts_filter_restrict_manage_posts(){
$type = 'post';
if (isset($_GET['post_type'])) {
$type = $_GET['post_type'];
}
//only add filter to post type you want
if ('POST_TYPE' == $type){
//change this to the list of values you want to show
//in 'label' => 'value' format
$values = array(
'label' => 'value',
'label1' => 'value1',
'label2' => 'value2',
);
?>
<select name="ADMIN_FILTER_FIELD_VALUE">
<option value=""><?php _e('Filter By ', 'wose45436'); ?></option>
<?php
$current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
foreach ($values as $label => $value) {
printf
(
'<option value="%s"%s>%s</option>',
$value,
$value == $current_v? ' selected="selected"':'',
$label
);
}
?>
</select>
<?php
}
}
add_filter( 'parse_query', 'wpse45436_posts_filter' );
/**
* if submitted filter by post meta
*
* make sure to change META_KEY to the actual meta key
* and POST_TYPE to the name of your custom post type
* @author Ohad Raz
* @param (wp_query object) $query
*
* @return Void
*/
function wpse45436_posts_filter( $query ){
global $pagenow;
$type = 'post';
if (isset($_GET['post_type'])) {
$type = $_GET['post_type'];
}
if ( 'POST_TYPE' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
$query->query_vars['meta_key'] = 'META_KEY';
$query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
}
}
POST_TYPE
hier versuchen , dieses: pastebin.com/tabUfh3Y
Wenn Sie eine andere Abfrage verwenden, restrict_manage_posts
stellen Sie sicher, dass Sie die && $query->is_main_query()
Anweisung parse_query if ergänzen , da sonst der Filter parse_query die zweite Abfrage beeinträchtigt.
if ( 'POST_TYPE' == $type
&& is_admin()
&& $pagenow=='edit.php'
&& isset($_GET['ADMIN_FILTER_FIELD_VALUE'])
&& $_GET['ADMIN_FILTER_FIELD_VALUE'] != ''
&& $query->is_main_query()
) {
$query->query_vars['meta_key'] = 'META_KEY';
$query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
}
Wenn Sie viele Felder hinzufügen müssen, müssen Sie zur Abfrage hinzufügen
$query->query_vars['meta_query'][] = array(
'key' => 'KEY',
'value' => $_GET['FIELD'],
'compare' => 'LIKE'
);