1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
<?php
namespace Tev\Taxonomy\Model;
use stdClass;
use Tev\Contracts\WordpressWrapperInterface,
Tev\Term\Factory as TermFactory,
Tev\Post\Model\AbstractPost;
/**
* Wordpress Taxonomy entity.
*
* Provides a nicely object-oriented interface to a Wordpress taxonomy.
*/
class Taxonomy implements WordpressWrapperInterface
{
/**
* Underlying taxonomy object.
*
* @var \stdClass
*/
private $base;
/**
* Term factory.
*
* @var \Tev\Term\Factory
*/
private $termFactory;
/**
* Constructor.
*
* @param \stdClass $base Underlying taxonomy object
* @param \Tev\Term\Factory $termFactory Term factory
* @return void
*/
public function __construct(stdClass $base,
TermFactory $termFactory)
{
$this->base = $base;
$this->termFactory = $termFactory;
}
/**
* Get the taxonomy name.
*
* @return string
*/
public function getName()
{
return $this->base->name;
}
/**
* Get the taxonomy plural label.
*
* @return string
*/
public function getPluralLabel()
{
return $this->base->label;
}
/**
* Get the taxonomy singular label.
*
* @return string
*/
public function getSingularLabel()
{
return $this->base->singular_label;
}
/**
* Get all Terms in this taxonomy.
*
* @param boolean $topLevel Whether or not to just get top level terms
* @param array $options Optional. Same options as passed to `get_terms()`
* @return \Tev\Term\Model\Term[] Array of terms
*/
public function getTerms($topLevel = false, $options = array())
{
$terms = array();
$wpTerms = get_terms($this->getName(), array_merge(array(
'hide_empty' => false,
'parent' => $topLevel ? 0 : ''
), $options));
foreach ($wpTerms as $termData) {
$terms[] = $this->termFactory->create($termData, $this);
}
return $terms;
}
/**
* Get all terms in this taxonomy for the given post.
*
* @param \Tev\Post\Model\AbstractPost $post Post object to get terms for
* @return array[\Tev\Term\Model\Term] Array of terms
*/
public function getTermsForPost(AbstractPost $post)
{
$terms = array();
if ($dbTerms = get_the_terms($post->getId(), $this->getName())) {
foreach ($dbTerms as $termData) {
$terms[] = $this->termFactory->create($termData, $this);
}
}
return $terms;
}
/**
* Check whether or not this taxonomy is heirarchical.
*
* @return boolean True if heirarchical, false if not
*/
public function isHierarchical()
{
return (boolean) $this->base->hierarchical;
}
/**
* Get the underlying taxonomy object.
*
* @return \stdClass
*/
public function getBaseObject()
{
return $this->base;
}
}