J'ai pu ajouter un champ personnalisé supplémentaire, nommé sticky
, à une taxonomie personnalisée, à l'aide du plugin wp taxonomy meta , comme suit:
function YOUR_PREFIX_register_taxonomy_meta_boxes()
{
// Make sure there's no errors when the plugin is deactivated or during upgrade
if ( !class_exists( 'RW_Taxonomy_Meta' ) )
return;
$meta_sections = array();
// First meta section
$meta_sections[] = array(
'title' => 'Sticky', // section title
'taxonomies' => array('tvr_amenity'), // list of taxonomies. Default is array('category', 'post_tag'). Optional
'id' => 'sticky', // ID of each section, will be the option name
'fields' => array( // List of meta fields
array(
'name' => 'Show in home filters',
'id' => 'sticky',
'type' => 'checkbox',
),
),
);
foreach ( $meta_sections as $meta_section )
{
new RW_Taxonomy_Meta( $meta_section );
}
}
Maintenant, j'essaie d'obtenir toutes les taxonomies ayant cette valeur vérifiée, comme ceci:
$types = $types = get_terms( 'tvr_amenity', array(
'parent' => '0',
'hide_empty' => 1,
'sticky' => 1
) );
Mais le filtre est ignoré (toutes les taxonomies parentes sont affichées), il retourne exactement la même chose que:
$types = $types = get_terms( 'tvr_amenity', array(
'parent' => '0',
'hide_empty' => 1
) );
Une idée de ce que je manque, ici?
OK, j'ai compris
<?php
$types = get_terms(
'tvr_amenity',
array(
'parent' => '0',
'hide_empty' => 1
)
);
foreach( $types as $type ) :
$myname = trim($type->name);
$meta = get_option('amenity_sticky');
if (empty($meta)) $meta = array();
if (!is_array($meta)) $meta = (array) $meta;
$meta = isset($meta[$type->term_id]) ? $meta[$type->term_id] : array();
$value = $meta['is_sticky'];
if(!$value) continue; /* skip term if is_sticky not checked */
?>
<p>
<input type='checkbox' name="apartment_amenity[]" value='<?php echo $type->term_id ?>' class='tvr_amenity'> <?php echo $myname ?>
</p>
<?php endforeach; ?>
premier changement ceci:
// First meta section
$meta_sections[] = array(
'title' => 'Sticky', // section title
'taxonomies' => array('tvr_amenity'), // list of taxonomies. Default is array('category', 'post_tag'). Optional
'id' => 'amenity_sticky', // ID of each section, will be the option name
'fields' => array( // List of meta fields
array(
'name' => 'Show in home filters',
'id' => 'is_sticky',
'type' => 'checkbox',
),
),
);
foreach ( $meta_sections as $meta_section )
{
new RW_Taxonomy_Meta( $meta_section );
}
Pour obtenir les informations au début, je pense que cela pourrait être la solution:
$terms = get_terms( 'tvr_amenity', array(
'hide_empty' => 0,
) );
foreach( (array) $terms as $term) {
$meta = get_option('tvr_amenity');
if (empty($meta)) $meta = array();
if (!is_array($meta)) $meta = (array) $meta;
$meta = isset($meta[$term->term_id]) ? $meta[$term->term_id] : array();
$term_link = get_term_link( $term, 'tvr_amenity' );
$is_sticky = $meta['is_aticky'];
$is_sticky_id = false;
if (is_array($is_sticky)) {
foreach ($is_sticky as $att) {
$is_sticky_id = $att;
}
} ?>
<a class="term-link" href="<?php echo $term_link; ?>" class="<?php echo $is_sticky; ?>">
<?php echo sprintf(__('%s', 'udla'), $term->name); ?>
</a>
<p><?php echo $term->description; ?></p>
<?php
}