chybné pole kategorie chybí s registrovanou vlastní taxonomií
<p>zaregistroval jsem nový termín taxonomie pomocí stejného kódu na dvou různých místech. na jednom místě (instalace vanilky), pokud přejdu do mého termínu taxonomie v menu admin, vidím možnost 'slim' pro obrazovku přidat kategorii. na mých dalších stránkách se všemi zásuvnými moduly, které jsou zakázány, se tato možnost nezobrazí.</p><p>každý, kdo ví, co to může způsobit?</p><p>registrovat kód taxonomie:</p><pre><code>register\_taxonomy( 'my\_topics', array( 'post', 'page' ), array( 'hierarchical' =&gt; true, 'label' =&gt; 'my categories', 'query\_var' =&gt; 'topics', 'rewrite' =&gt; array('slug' =&gt; 'topics') ) ); </code></pre>
<p>hodnota pro global\_terms\_enabled pro multisite je uložena v wp\_sitemeta</p><p> <a href="http://wordpress.org/support/topic/plugin-edit-category-slug-wpmu-how-to-make-it-work-with-last-wpmu-30">http://wordpress.org/support/topic/plugin-edit-category-slug-wpmu-how-to-make-it-work-with-last-wpmu-30</a> </p><p>přepnula jsem to na vypnuto a znovu se objeví pole kategorie slug. pokud se někdo může vyjádřit k tomu, zda je to bezpečné vypnout, bylo by to velmi oceňováno.</p>
<p>obsah můžete přidat do <a href="http://core.trac.wordpress.org/browser/branches/3.0/wp-admin/edit-tag-form.php">stránek pro úpravu kategorií</a> pomocí zaháknutí do <code>edit\_category\_form\_fields</code> (stále v tabulce formuláře) nebo <code>edit\_category\_form</code> (mimo tabulku, ale před tlačítkem odeslat ). podobné háčky existují pro značky nebo vlastní taxonomie, zkontrolujte zdroj. chcete-li zvládnout tyto dodatečné hodnoty, musíte najít dobrý háček sami, ujistěte se, že s ním budete pracovat <a href="http://core.trac.wordpress.org/browser/branches/3.0/wp-admin/edit-tags.php#l135">před přesměrováním <code>editedtag</code></a> .</p><p>neexistují žádné čisté meta box manipulátory, musíte napsat většinu kódu sami. ale dejte nám prosím vědět, jak jste to udělali, mohlo by to být zajímavé pro ostatní!</p> <p>v drupal 6), pokud znáte id taxonomického výrazu, můžete získat id slovní zásoby pomocí následujícího kódu:</p><pre><code>$term = taxonomy\_get\_term($tid); $vid = $term-&gt;vid; </code></pre><p>pokud máte id uzlu, můžete pomocí následujícího kódu získat id slovní zásoby všech taxonomických pojmů spojených s uzlem pomocí následujícího kódu:</p><pre><code>$node = node\_load($nid); $vids = array(); if (!empty($node-&gt;taxonomy)) { foreach ($node-&gt;taxonomy as $tid =&gt; $term) { $vids[] = $term-&gt;vid; } } </code></pre><p>v drupal 7) bude kód následující:</p><pre><code>$term = taxonomy\_term\_load($tid); $vid = $term-&gt;vid; </code></pre><p>v drupal 7, vlastnost uzlu <code>$node-&gt;taxonomy</code> již neexistuje. místo toho existuje <code>$node-&gt;field\_&lt;vocabulary\_name&gt;</code>, což je pole se dvěma různými strukturami.</p><ul> <li> <p>značky</p> <p><img src="https://i.stack.imgur.com/x3ola.png" alt="screenshot"></p> </li> <li> <p>další taxonomické pojmy</p> <p><img src="https://i.stack.imgur.com/oe2sr.png" alt="screenshot"></p> </li> </ul><p>pokud použijete <a href="http://api.drupal.org/api/drupal/modules!field!field.module/function/field\_get\_items/7">field\_get\_items ()</a> , získáte taxonomické termíny v jazyce, ve kterém by se zobrazily, nebo v jazyce, jehož kód je předán jako argument funkce.</p><pre><code>$items = field\_get\_items('node', $node, $field\_name); </code></pre><p><code>$node</code> obsahuje objekt uzlu a <code>$field\_name</code> název pole taxonomického termínu.</p><p><code>$items</code> obsahuje zjednodušené pole ve srovnání s polem obsaženým v <code>$node-&gt;field\_&lt;vocabulary\_name&gt;</code>.</p><p><img src="https://i.stack.imgur.com/ylcve.png" alt="screenshot"></p> <p>hej kluci, myslím, že to mám! po prohlédnutí několika funkcí v souboru taxonomie.php ve wordpressu jsem našel tuto funkci <code>get\_object\_taxonomies();</code>, která udělala trik :)</p><p>zde je funkce</p><pre><code>function get\_post\_taxonomies($post) { // passing an object // why another var?? $output = 'objects'; // name / objects $taxonomies = get\_object\_taxonomies($post, 'objects'); /*// passing a string using get\_post\_type: return (string) post, page, custom... $post\_type = get\_post\_type($post); $taxonomies = get\_object\_taxonomies($post\_type, 'objects');*/ /*// in the loop with the id $theid = get\_the\_id(); $post\_type = get\_post\_type($theid); $taxonomies = get\_object\_taxonomies($post\_type, 'objects');*/ // you can also use the global $post // edited to fix previous error $taxonomies // edited to force type hinting array return (array) $taxonomies; // returning array of taxonomies } </code></pre> <p>ahoj <strong> @ jonathan sampson </strong>:</p><p>existují <strong> několik zásuvných modulů, které usnadňují vytváření uživatelských typů příspěvků </strong> a některé umožňují definovat také vlastní pole, a to v konkrétním pořadí:</p><ul> <li> <a href="http://www.wpeasyposttypes.com/"><strong> typy jednoduchých příspěvků wp </strong></a> </li> <li> <a href="http://wordpress.org/extend/plugins/gd-taxonomies-tools/"><strong> vlastní příspěvky a nástroje taxonomie gd </strong></a> </li> <li> <a href="http://www.strangework.com/wordpress-plugins/custom-post-type-ui/"><strong> ui uživatelského typu příspěvku </strong></a> </li> <li> <a href="http://wordpress.org/extend/plugins/simple-fields/"><strong> jednoduchá pole </strong></a> </li> </ul><p>jak jsem zmínil výše, pracoval jsem na tom, který neposkytuje uživatelské rozhraní, jako jsou tyto, namísto toho rozšiřitelné rozhraní api pro složité typy polí (a také jednoduché). pro distribuci. možná za pár týdnů.</p><p>tyto pluginy uvedené výše by měly splňovat vaše základní potřeby a já se pokusím, aby se moje kompatibilní s daty uloženými všemi těmito v budoucnu v případě, že se rozhodnete použít moje v budoucnu.</p><p>můžete také najít tento příspěvek trochu pomoci také:</p><ul> <li> <a href="https://wordpress.stackexchange.com/questions/128/tips-for-using-wordpress-as-a-cms/187#187"><strong> tipy pro používání wordpressu jako cms? </strong></a> </li> </ul> <p>kdybych byl tebou, nezměnil bych název třídy, ale raději přidám svou vlastní třídu do elementu formuláře. můžete to provést implementací <a href="http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook\_form\_alter/7">hook\_form\_alter</a> do vlastního modulu nebo (v případě drupal 7) do vašeho motivu. kód by vypadal asi takto:</p><pre><code>&lt;?php function mymodule\_form\_alter(&amp;$form, &amp;$form\_state, $form\_id) { if ($form\_id = 'my\_form') { $form['actions']['submit']['#attributes']['class'][] = 'form-submitone'; } } ?&gt; </code></pre><p>mimochodem, tlačítko tlačítka odeslat nemusí být nutně <code>$form['actions']['submit']</code>. budete muset zjistit, který prvek je tlačítko odeslání ve vaší konkrétní situaci. můžete to provést výstupem proměnné $ form; doporučuji nainstalovat modul <a href="http://drupal.org/project/devel">devel</a> a přidat funkci <code>dsm($form);</code> k výše uvedené funkci.</p> <p>měl jsem stejný problém a tady je to, co můžete udělat. níže uvedený kód zakáže značku h1 z oddílu formátů bloků. stejným způsobem můžete zakázat další značky a také přidat vlastní. ale nejsem si jistý, jak k nim přidat vlastní styly css. doufám, že tento kód vám dá nápovědu, jakým způsobem dig.</p><pre><code>//modify tinymce editor to hide h1. function tiny\_mce\_remove\_unused\_formats( $initformats ) { // add block format elements you want to show in dropdown $initformats['block\_formats'] = 'paragraph=p;heading 2=h2;heading 3=h3;heading 4=h4;heading 5=h5;heading 6=h6;preformatted=pre'; return $initformats; } add\_filter( 'tiny\_mce\_before\_init', 'tiny\_mce\_remove\_unused\_formats' ); </code></pre><p><br> <strong> aktualizovat: </strong></p><p>to, co hledáte, bylo možné před vydáním wordpressu 3.9. dříve jste museli napsat tyto řádky kódu, aby to bylo možné. <code>theme\_advanced\_styles</code> je bohužel zastaralý, protože wp 3.9 aktualizoval tinymce na verzi 4 ( <a href="https://codex.wordpress.org/tinymce">viz change log</a> ). více informací na blogu <a href="https://ozz.blog/2014/04/19/customizing-tinymce-4-0/">andrew ozz</a> .<br> <br> tak to bylo dříve ( <a href="http://wesbos.com/custom-wordpress-tinymce-wysiwyg-classes/">zdroj</a> ):</p><pre><code>function make\_mce\_awesome( $init ) { // deprecated settings $init['theme\_advanced\_blockformats'] = 'h2,h3,h4,p'; $init['theme\_advanced\_disable'] = 'underline,spellchecker,wp\_help'; $init['theme\_advanced\_text\_colors'] = '0f3156,636466,0486d3'; $init['theme\_advanced\_buttons2\_add'] = 'styleselect'; $init['theme\_advanced\_styles'] = "bigtitle=bigtitle;call to action button=ctabutton,rounded corners=rounded"; return $init; } add\_filter('tiny\_mce\_before\_init', 'make\_mce\_awesome'); </code></pre><p><br> <strong> řešení: </strong></p><p>každopádně mám své řešení pro váš úkol. můžete se zbavit výchozího rozevíracího seznamu a přidat do něj formáty se čtyřmi styly. to vám pomůže vyhnout se zmatkům s uživateli, z čeho vybírají styly.</p><p>zakázat výchozí rozevírací nabídku:</p><pre><code>function remove\_default\_format\_select( $buttons ) { //remove the format dropdown select and text color selector $remove = array( 'formatselect' ); return array\_diff( $buttons, $remove ); } add\_filter( 'mce\_buttons', 'remove\_default\_format\_select' ); </code></pre><p><br> přidat nový rozevírací seznam formáty ( <a href="https://codex.wordpress.org/tinymce\_custom\_styles">více zde</a> ):</p><pre><code>// callback function to insert 'styleselect' into the $buttons array function my\_new\_mce\_buttons( $buttons ) { array\_unshift( $buttons, 'styleselect' ); return $buttons; } // register our callback to the appropriate filter add\_filter( 'mce\_buttons', 'my\_new\_mce\_buttons' ); // callback function to filter the mce settings function my\_mce\_before\_init\_insert\_formats( $init\_array ) { // define the style\_formats array $style\_formats = array( array( 'title' =&gt; 'headline', 'block' =&gt; 'h1' ), array( 'title' =&gt; 'subheadline', 'block' =&gt; 'h2' ), array( 'title' =&gt; 'statement', 'block' =&gt; 'div', 'classes' =&gt; 'statement\_class', 'wrapper' =&gt; true ) ); // insert the array, json encoded, into 'style\_formats' $init\_array['style\_formats'] = json\_encode( $style\_formats ); return $init\_array; } // attach callback to 'tiny\_mce\_before\_init' add\_filter( 'tiny\_mce\_before\_init', 'my\_mce\_before\_init\_insert\_formats' ); </code></pre><p><br> poslední. zaregistrujte soubor css a získejte vizuální vzhled v editoru: ( <a href="https://developer.wordpress.org/reference/functions/add\_editor\_style/">další informace</a> </p><pre><code>/** * registers an editor stylesheet for the theme. */ function wpdocs\_theme\_add\_editor\_styles() { add\_editor\_style( 'custom-editor-style.css' ); } add\_action( 'admin\_init', 'wpdocs\_theme\_add\_editor\_styles' ); </code></pre><p><br> snad to pomůže.</p> <p>máte pro to dvě řešení:</p><ol> <li>použití <a href="http://codex.wordpress.org/custom\_fields">vlastní pole</a> toto je velmi komplexní průvodce: <a href="http://wparena.com/how-to/the-power-of-wordpress-custom-fields/">síla vlastních polí wordpress</a> . existuje několik velmi užitečných pluginů <a href="http://wordpress.org/extend/plugins/custom-field-template/">šablona vlastního pole</a> a <a href="http://wparena.com/how-to/the-power-of-wordpress-custom-fields/">kouzelná pole</a> , která použij je.</li> <li>použít <a href="http://codex.wordpress.org/wordpress\_widgets">widgety</a> . rozhraní api <a href="http://codex.wordpress.org/widgets\_api">widgets</a> umožňuje snadno vytvářet vlastní widgety.</li> </ol> <p>mám sklon souhlasit se svým šéfem :) možná, že skutečná aplikace má jiný pocit, ale podle vzhledu makety se nezdá být velmi elegantní.</p><p>co se stane, když po výběru podkategorie změním kategorii, resetuje se tato podkategorie? a pokud vyberu několik kategorií, obsahuje rozbalovací nabídka podkategorie podkategorie všech kategorií, které jsem vybral?</p><p>výběr několika kategorií současně vyžaduje hodně práce, protože rozevírací seznam se po kliknutí zavře a je třeba jej znovu otevřít po každé přidané položce a znovu ji naskenovat, abyste našli další potřebnou položku.</p><p>vaše odpověď zní jako rozevírací/vyskakovací strom se zaškrtávacími políčky.</p> <p>nedávno jsem tento problém vyřešil skrytím zobrazení výchozího názvu v pohledech a do zobrazení přidal pole „content all: taxonomy term“. poté v části "záhlaví" pohledů přidejte "global: text area" a vyberte textový formát "php code". zaškrtněte "použít náhradní vzory z prvního řádku". kliknutím na „náhradní vzory“ zobrazíte všechny své tokeny. do textového pole vložte kód: <code>&lt;h1&gt;[term\_node\_tid]&lt;/h1&gt;</code> název vašeho termínu by měl nahradit výchozí název.</p><p>snad to pomůže.</p> <p>v nabídce <code>tools &gt; import</code> na vašem webu je plugin, který můžete nainstalovat s názvem <strong> <a href="http://wordpress.org/extend/plugins/wpcat2tag-importer/">převaděč kategorií a značek</a> </strong>, který po instalaci vám poskytne kontrolu nad tím, jak zacházet s kategoriemi, které byste chtěli převést.</p><p>jedná se o relativně bezbolestný proces ve třech případech, kdy jsem ho použil, ale nikdy jsem se nezabýval migrací starších adres url. pokud se jedná o problém a kategorie „slimáci“ pro kategorii jsou stejné a běžíte pod aplikací apache, mělo by to být trikem některých směrnic <code>.htaccess</code>. takže za předpokladu, že máte adresy url, jako například:</p><pre><code>http://example.com/archive/category/foo http://example.com/archive/category/bar </code></pre><p>a chci je změnit na:</p><pre><code>http://example.com/archive/tag/foo http://example.com/archive/tag/bar </code></pre><p>do svého souboru <code>.htaccess</code> byste přidali směrnice pro každou z nich, například:</p><pre><code>redirect permanent /archive/category/bar http://example.com/archive/tag/bar redirect permanent /archive/category/foo http://example.com/archive/tag/foo </code></pre><p>nyní to předpokládá, že je chcete přesměrovat, a žádný z autorů vašeho blogu tyto kategorie nepřidá!</p><p>ale obecně by to byl přístup, který by fungoval.</p><p>pokud jste <strong> vůbec </strong> znepokojeni ztrátou dat, když změníte obsah, zálohujte databáze mysql. <em> promiň, musel jsem to křičet. : -) </em> a pokud jde o haywire, pak jednoduše obnovte databázi.</p><p>pokud jste ve svém obsahu odkazovali na tyto staré adresy url, přesměrují se dobře. ale můžete také spustit <a href="http://wordpress.org/extend/plugins/search-and-replace/"><strong> wordpress search and replace </strong></a> plugin, který usnadňuje migraci, jako je tato, ale opět, zálohy mysli, zejména s plugin pro vyhledávání a nahrazování, protože provádí změny bez zálohy.</p>