Merge branch 'feature/taxonomy-enable-posttypes' into develop
This commit is contained in:
commit
244f933bcb
|
@ -213,6 +213,20 @@ class Admin {
|
||||||
|
|
||||||
$settings['form_hooks'] = Admin_Hooks::get_instance()->get_registered_hooks();
|
$settings['form_hooks'] = Admin_Hooks::get_instance()->get_registered_hooks();
|
||||||
|
|
||||||
|
$wp_post_types = get_post_types(['show_ui' => true], 'objects');
|
||||||
|
if (isset($wp_post_types['attachment'])) {
|
||||||
|
unset($wp_post_types['attachment']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$wp_post_types = array_map(function($i) {
|
||||||
|
return [
|
||||||
|
'slug' => $i->name,
|
||||||
|
'label' => $i->label
|
||||||
|
];
|
||||||
|
}, $wp_post_types);
|
||||||
|
|
||||||
|
$settings['wp_post_types'] = $wp_post_types;
|
||||||
|
|
||||||
return $settings;
|
return $settings;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,6 +113,31 @@
|
||||||
</label>
|
</label>
|
||||||
</b-field>
|
</b-field>
|
||||||
|
|
||||||
|
<!-- Activate for other post types -->
|
||||||
|
<b-field
|
||||||
|
:addons="false"
|
||||||
|
:label="$i18n.getHelperTitle('taxonomies', 'enabled_post_types')"
|
||||||
|
:type="editFormErrors['enabled_post_types'] != undefined ? 'is-danger' : ''"
|
||||||
|
:message="editFormErrors['enabled_post_types'] != undefined ? editFormErrors['enabled_post_types'] : ''">
|
||||||
|
<help-button
|
||||||
|
:title="$i18n.getHelperTitle('taxonomies', 'enabled_post_types')"
|
||||||
|
:message="$i18n.getHelperMessage('taxonomies', 'enabled_post_types')"/>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-for="wpPostType in wpPostTypes"
|
||||||
|
:key="wpPostType.slug"
|
||||||
|
class="field">
|
||||||
|
<b-checkbox
|
||||||
|
:native-value="wpPostType.slug"
|
||||||
|
:true-value="wpPostType.slug"
|
||||||
|
false-value=""
|
||||||
|
v-model="form.enabledPostTypes"
|
||||||
|
name="enabled_post_types" >
|
||||||
|
{{ wpPostType.label }}
|
||||||
|
</b-checkbox>
|
||||||
|
</div>
|
||||||
|
</b-field>
|
||||||
|
|
||||||
<!-- Hook for extra Form options -->
|
<!-- Hook for extra Form options -->
|
||||||
<template
|
<template
|
||||||
v-if="formHooks != undefined &&
|
v-if="formHooks != undefined &&
|
||||||
|
@ -180,7 +205,8 @@
|
||||||
status: String,
|
status: String,
|
||||||
description: String,
|
description: String,
|
||||||
slug: String,
|
slug: String,
|
||||||
allowInsert: String
|
allowInsert: String,
|
||||||
|
enabledPostTypes: Array
|
||||||
},
|
},
|
||||||
statusOptions: [{
|
statusOptions: [{
|
||||||
value: 'publish',
|
value: 'publish',
|
||||||
|
@ -195,6 +221,7 @@
|
||||||
value: 'trash',
|
value: 'trash',
|
||||||
label: this.$i18n.get('trash')
|
label: this.$i18n.get('trash')
|
||||||
}],
|
}],
|
||||||
|
wpPostTypes: tainacan_plugin.wp_post_types,
|
||||||
editFormErrors: {},
|
editFormErrors: {},
|
||||||
formErrorMessage: '',
|
formErrorMessage: '',
|
||||||
entityName: 'taxonomy'
|
entityName: 'taxonomy'
|
||||||
|
@ -216,6 +243,8 @@
|
||||||
formNotSaved = true;
|
formNotSaved = true;
|
||||||
if (this.taxonomy.status != this.form.status)
|
if (this.taxonomy.status != this.form.status)
|
||||||
formNotSaved = true;
|
formNotSaved = true;
|
||||||
|
if (this.taxonomy.enabled_post_types != this.form.enabledPostTypes)
|
||||||
|
formNotSaved = true;
|
||||||
|
|
||||||
if (formNotSaved) {
|
if (formNotSaved) {
|
||||||
this.$modal.open({
|
this.$modal.open({
|
||||||
|
@ -275,7 +304,8 @@
|
||||||
description: this.form.description,
|
description: this.form.description,
|
||||||
slug: this.form.slug ? this.form.slug : '',
|
slug: this.form.slug ? this.form.slug : '',
|
||||||
status: this.form.status,
|
status: this.form.status,
|
||||||
allow_insert: this.form.allowInsert
|
allow_insert: this.form.allowInsert,
|
||||||
|
enabled_post_types: this.form.enabledPostTypes
|
||||||
};
|
};
|
||||||
this.fillExtraFormData(data);
|
this.fillExtraFormData(data);
|
||||||
this.updateTaxonomy(data)
|
this.updateTaxonomy(data)
|
||||||
|
@ -292,6 +322,7 @@
|
||||||
this.form.description = this.taxonomy.description;
|
this.form.description = this.taxonomy.description;
|
||||||
this.form.status = this.taxonomy.status;
|
this.form.status = this.taxonomy.status;
|
||||||
this.form.allowInsert = this.taxonomy.allow_insert;
|
this.form.allowInsert = this.taxonomy.allow_insert;
|
||||||
|
this.form.enabledPostTypes = this.taxonomy.enabled_post_types;
|
||||||
|
|
||||||
this.isLoadingTaxonomy = false;
|
this.isLoadingTaxonomy = false;
|
||||||
this.formErrorMessage = '';
|
this.formErrorMessage = '';
|
||||||
|
@ -408,6 +439,7 @@
|
||||||
this.form.slug = this.taxonomy.slug;
|
this.form.slug = this.taxonomy.slug;
|
||||||
this.form.status = this.taxonomy.status;
|
this.form.status = this.taxonomy.status;
|
||||||
this.form.allowInsert = this.taxonomy.allow_insert;
|
this.form.allowInsert = this.taxonomy.allow_insert;
|
||||||
|
this.form.enabledPostTypes = this.taxonomy.enabled_post_types;
|
||||||
|
|
||||||
this.isLoadingTaxonomy = false;
|
this.isLoadingTaxonomy = false;
|
||||||
});
|
});
|
||||||
|
@ -417,4 +449,3 @@
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,8 +71,8 @@ class Taxonomy extends Entity {
|
||||||
$args = array(
|
$args = array(
|
||||||
'hierarchical' => true,
|
'hierarchical' => true,
|
||||||
'labels' => $labels,
|
'labels' => $labels,
|
||||||
'show_ui' => tnc_enable_dev_wp_interface(),
|
'show_ui' => true,
|
||||||
'show_admin_column' => tnc_enable_dev_wp_interface(),
|
'show_admin_column' => false,
|
||||||
'rewrite' => [
|
'rewrite' => [
|
||||||
'slug' => $this->get_slug()
|
'slug' => $this->get_slug()
|
||||||
],
|
],
|
||||||
|
@ -82,9 +82,12 @@ class Taxonomy extends Entity {
|
||||||
unregister_taxonomy($this->get_db_identifier());
|
unregister_taxonomy($this->get_db_identifier());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$enabled_post_types = $this->get_enabled_post_types();
|
||||||
|
$enabled_post_types = sizeof($enabled_post_types) ? $enabled_post_types : null;
|
||||||
|
|
||||||
register_taxonomy(
|
register_taxonomy(
|
||||||
$this->get_db_identifier(),
|
$this->get_db_identifier(),
|
||||||
null,
|
$enabled_post_types,
|
||||||
$args
|
$args
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -129,6 +132,15 @@ class Taxonomy extends Entity {
|
||||||
return $this->get_mapped_property('slug');
|
return $this->get_mapped_property('slug');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the enabled post types
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function get_enabled_post_types() {
|
||||||
|
return $this->get_mapped_property('enabled_post_types');
|
||||||
|
}
|
||||||
|
|
||||||
// special Getters
|
// special Getters
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,6 +191,15 @@ class Taxonomy extends Entity {
|
||||||
$this->set_mapped_property('allow_insert', $value);
|
$this->set_mapped_property('allow_insert', $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets enabled post types
|
||||||
|
*
|
||||||
|
* @param array $value array of post types slugs
|
||||||
|
*/
|
||||||
|
function set_enabled_post_types($value) {
|
||||||
|
$this->set_mapped_property('enabled_post_types', $value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validate Taxonomy
|
* Validate Taxonomy
|
||||||
*
|
*
|
||||||
|
|
|
@ -65,6 +65,15 @@ class Taxonomies extends Repository {
|
||||||
'validation' => v::stringType()->in( [ 'yes', 'no' ] ), // yes or no
|
'validation' => v::stringType()->in( [ 'yes', 'no' ] ), // yes or no
|
||||||
'default' => 'yes'
|
'default' => 'yes'
|
||||||
],
|
],
|
||||||
|
'enabled_post_types' => [
|
||||||
|
'map' => 'meta_multi',
|
||||||
|
'title' => __( 'Enabled for post types', 'tainacan' ),
|
||||||
|
'type' => 'array/string',
|
||||||
|
'description' => __( 'Also enable this taxonomy for other WordPress post types', 'tainacan' ),
|
||||||
|
'on_error' => __( 'Error enabling this taxonomy for post types', 'tainacan' ),
|
||||||
|
'validation' => '',
|
||||||
|
'default' => []
|
||||||
|
],
|
||||||
'collections_ids' => [
|
'collections_ids' => [
|
||||||
'map' => 'meta_multi',
|
'map' => 'meta_multi',
|
||||||
'title' => __( 'Collections', 'tainacan' ),
|
'title' => __( 'Collections', 'tainacan' ),
|
||||||
|
|
|
@ -37,6 +37,8 @@ class Entity_Factory {
|
||||||
$Tainacan_Item_Metadata = \Tainacan\Repositories\Item_Metadata::get_instance();
|
$Tainacan_Item_Metadata = \Tainacan\Repositories\Item_Metadata::get_instance();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
$type = trim($type);
|
||||||
|
|
||||||
if(empty($type)){
|
if(empty($type)){
|
||||||
throw new \InvalidArgumentException('The type can\'t be empty');
|
throw new \InvalidArgumentException('The type can\'t be empty');
|
||||||
} elseif(!strrchr($type, '_')){
|
} elseif(!strrchr($type, '_')){
|
||||||
|
@ -68,7 +70,7 @@ class Entity_Factory {
|
||||||
|
|
||||||
if (!empty($args) && $is_validated_and_in_db) {
|
if (!empty($args) && $is_validated_and_in_db) {
|
||||||
foreach ($args as $attribute => $content) {
|
foreach ($args as $attribute => $content) {
|
||||||
$set_ = 'set_' . $attribute;
|
$set_ = 'set_' . trim($attribute);
|
||||||
$this->entity->$set_( $content );
|
$this->entity->$set_( $content );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +82,7 @@ class Entity_Factory {
|
||||||
|
|
||||||
} elseif (!empty($args) && !$is_validated_and_in_db){
|
} elseif (!empty($args) && !$is_validated_and_in_db){
|
||||||
foreach ($args as $attribute => $content) {
|
foreach ($args as $attribute => $content) {
|
||||||
$set_ = 'set_' . $attribute;
|
$set_ = 'set_' . trim($attribute);
|
||||||
$this->entity->$set_( $content );
|
$this->entity->$set_( $content );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -252,4 +252,28 @@ class Taxonomies extends TAINACAN_UnitTestCase {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group enabled
|
||||||
|
*/
|
||||||
|
function test_enabled_post_types(){
|
||||||
|
$Tainacan_Taxonomies = \Tainacan\Repositories\Taxonomies::get_instance();
|
||||||
|
$Tainacan_Terms = \Tainacan\Repositories\Terms::get_instance();
|
||||||
|
|
||||||
|
$taxonomy = $this->tainacan_entity_factory->create_entity(
|
||||||
|
'taxonomy',
|
||||||
|
array(
|
||||||
|
'name' => 'genero',
|
||||||
|
'enabled_post_types' => ['post']
|
||||||
|
),
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
$taxonomy = $Tainacan_Taxonomies->insert($taxonomy);
|
||||||
|
|
||||||
|
$pto = get_object_taxonomies('post');
|
||||||
|
$pages = get_object_taxonomies('page');
|
||||||
|
$this->assertContains($taxonomy->get_db_identifier(), $pto);
|
||||||
|
$this->assertNotContains($taxonomy->get_db_identifier(), $pages);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue