como faço para filtrar a descrição do trecho do metabox no admin?
<p>desejo alterar o padrão "trechos são resumos manuais opcionais do seu conteúdo que podem ser usados ​​em seu tema. saiba mais sobre trechos manuais". help text abaixo da área de entrada excerpt para algo mais significativo para o meu custom post type.</p><p>eu fiz algo parecido com o post title, usando um filtro de "tradução", mas como eu faria isso com o trecho do post?</p><p>aqui está meu código atual:<br> <code>add\_filter('gettext', 'custom\_rewrites', 10, 4);<br> function custom\_rewrites($translation, $text, $domain) {</code></p><pre><code> global $post; $translations = &amp;get\_translations\_for\_domain($domain); $translation\_array = array(); switch ($post-&gt;post\_type) { case 'model': $translation\_array = array( 'enter title here' =&gt; 'enter model name here', 'excerpt' =&gt; "byline", 'excerpts are optional hand-crafted summaries of your content that can be used in your theme.' =&gt; "foobar" ); break; } if (array\_key\_exists($text, $translation\_array)) { return $translations-&gt;translate($translation\_array[$text]); } return $translation; } </code></pre><p>a terceira tradução não está funcionando?</p>
<p>esta descrição é gerada pela função <code>post\_excerpt\_meta\_box()</code> e não é passada através de nenhum filtro explícito. no entanto, ele é ecoado pela função relacionada à tradução <a href="http://codex.wordpress.org/function\_reference/\_e"><code>\_e()</code></a> e, assim, passa pelo filtro <code>gettext</code> (que, da sua pergunta, você já conhece).</p><p>quanto a limitá-lo ao seu cpt, acho que o tipo de postagem atual em admin é mantido na variável global <code>$post\_type</code> que você pode verificar.</p>
<h2>configurando a ordem de caixas meta em páginas de edição de postagem</h2><p>você precisará remover as caixas meta e adicioná-las novamente na ordem desejada.</p><p>para desabilitar caixas meta: (personalize para suas necessidades, olhe o id do metabox no código html para saber qual nome você deve usar como primeiro parâmetro das funções)</p><pre><code>function my\_remove\_meta\_boxes() { remove\_meta\_box('postcustom', 'post', 'core'); remove\_meta\_box('commentsdiv', 'post', 'core'); ... } add\_action( 'admin\_menu', 'my\_remove\_meta\_boxes' ); </code></pre><p>depois de removê-los, você pode usar a função add\_meta\_box para adicioná-los em novas posições: <a href="http://codex.wordpress.org/function\_reference/add\_meta\_box">http://codex.wordpress.org/function\_reference/add\_meta\_box</a> . a ordem das caixas meta depende da ordem em que você chama a função add\_meta\_box. por exemplo: com o seguinte trecho de código, a caixa meta de comentários será antes da caixa meta de campos personalizados.</p><pre><code>function my\_add\_meta\_boxes( $post\_type, $post ) { if ( ('publish' == $post-&gt;post\_status || 'private' == $post-&gt;post\_status) &amp;&amp; post\_type\_supports($post\_type, 'comments') ) add\_meta\_box('commentsdiv', \_\_('comments'), 'post\_comment\_meta\_box', $post\_type, 'normal', 'core'); if ( post\_type\_supports($post\_type, 'custom-fields') ) add\_meta\_box('postcustom', \_\_('custom fields'), 'post\_custom\_meta\_box', $post\_type, 'normal', 'core'); ... } add\_action( 'add\_meta\_boxes', 'my\_add\_meta\_boxes' ); </code></pre><p>você pode querer olhar para o arquivo wp-admin/edit-form-advanced.php</p><h2>definir qual título de coluna aparece na página da lista de postagens</h2><p>você precisa usar o filtro manage \_ {$ post\_type} \_posts\_columns. por exemplo: o fragmento a seguir removerá a coluna de comentários.</p><pre><code>function my\_remove\_columns( $posts\_columns ) { unset( $posts\_columns['comments'] ); return $posts\_columns; } add\_filter( 'manage\_post\_posts\_columns', 'my\_remove\_columns' ); </code></pre><h2>definir os resultados padrão a serem mostrados na página da lista de postagens</h2><p>use os filtros 'edit \_ {$ post\_type} \_per\_page' e 'edit\_posts\_per\_page'.</p><pre><code>function my\_edit\_post\_per\_page( $per\_page, $post\_type ) { $edit\_per\_page = 'edit\_' . $post\_type . '\_per\_page'; $per\_page = (int) get\_user\_option( $edit\_per\_page ); if ( empty( $per\_page ) || $per\_page &lt; 1 ) $per\_page = 1; return $per\_page; } add\_filter( 'edit\_posts\_per\_page', 'my\_edit\_post\_per\_page' ); </code></pre><p>para segmentar um tipo de postagem específico:</p><ul> <li> <p>use <code>add\_filter( 'edit\_{post type}\_per\_page', 'my\_edit\_post\_per\_page' );</code>, por exemplo <code>add\_filter( 'edit\_post\_per\_page', 'my\_edit\_post\_per\_page' );</code> para posts, <code>add\_filter( 'edit\_page\_per\_page', 'my\_edit\_post\_per\_page' );</code> para páginas.</p> </li> <li> <p>ou use uma condição dentro de sua função. por exemplo.:</p> <p>function my\_edit\_post\_per\_page ($ per\_page, $ post\_type) {</p> <pre><code>if( $post\_type == 'post' ) { $edit\_per\_page = 'edit\_' . $post\_type . '\_per\_page'; $per\_page = (int) get\_user\_option( $edit\_per\_page ); if ( empty( $per\_page ) || $per\_page &lt; 1 ) $per\_page = 1; } return $per\_page; </code></pre></li> </ul> <p>use o gancho de ação save\_post e, na função de retorno de chamada, use a função wp\_set\_object\_terms ($ object\_id, $ terms, $ taxonomy, $ append).</p><p>para o seu post personalizado digite o código pode ser assim</p><pre><code>function save\_book\_meta( $post\_id, $post, $update ) { $slug = 'book'; //slug of cpt // if this isn't a 'book' post, don't update it. if ( $slug != $post-&gt;post\_type ) { return; } wp\_set\_object\_terms( get\_the\_id(), $term\_id, $taxonomy ); } add\_action( 'save\_post', 'save\_book\_meta', 10, 3 ); </code></pre><p>$ taxonomy - o contexto no qual relacionar o termo ao objeto. isso pode ser categoria, post\_tag ou o nome de outra taxonomia.</p><p>$ term\_id - id do termo da taxonomia</p><p>eu não conheço seu projeto completamente, então você pode considerar este trecho como uma maneira de fazer o que você queria fazer.</p><p>para mais referências, visite estes dois links abaixo:</p><p> <a href="https://codex.wordpress.org/function\_reference/wp\_set\_object\_terms">https://codex.wordpress.org/function\_reference/wp\_set\_object\_terms</a> </p><p> <a href="https://codex.wordpress.org/plugin\_api/action\_reference/save\_post">https://codex.wordpress.org/plugin\_api/action\_reference/save\_post</a> </p><p>eu espero que você encontre uma saída.</p> <p>@casperah apontou que estou pensando errado. um <code>textbox</code> não <em>tem</em> linhas, ele tem<strong> text </strong>. esse texto pode ser dividido no crlf em linhas, se solicitado - mas não há noção de linhas.</p><p>a questão então é como realizar o que eu quero, ao invés do que o winforms me permite. </p><p>outras variantes dadas têm um bug sutil:</p><ul> <li><code>textbox1.appendtext("hello" + environment.newline);</code></li> <li><code>textbox1.appendtext("hello" + "\r\n");</code></li> <li><code>textbox1.text += "hello\r\n"</code></li> <li><code>textbox1.text += system.environment.newline + "brown";</code></li> </ul><p>eles acrescentam ou prefixam uma nova linha quando um (talvez) não seja necessário.</p><p>então, ajudante de extensão:</p><pre><code>public static class winformsextensions { public static void appendline(this textbox source, string value) { if (source.text.length==0) source.text = value; else source.appendtext("\r\n"+value); } } </code></pre><p>então agora:</p><pre><code>textbox1.clear(); textbox1.appendline("red"); textbox1.appendline("green"); textbox1.appendline("blue"); </code></pre><p>e</p><pre><code>textbox1.appendline(string.format("processing file {0}", filename)); </code></pre><blockquote> <p><strong> nota </strong>: qualquer código é liberado para o domínio público. nenhuma atribuição é necessária.</p> </blockquote> <p>opa bruno, tudo bom?</p>
<p>tente incluir essa linha antes de utilizar o <code>printwriter</code> pra adicionar conteúdo à sua resposta:</p>
<pre class="prettyprint"><code>resp.setheader(&#34;content-type&#34;, &#34;text/html; charset&#61;utf-8&#34;);</code></pre>
<p>isso força a resposta a utilizar um encoding específico. outra alternativa seria incluir isso no corpo html da resposta:</p>
<pre class="prettyprint"><code>string body &#61; &#34;&lt;html&gt;&#34;&#43;
 &#34;&lt;head&gt;&lt;meta charset&#61;&#34;utf-8&#34;&gt;&lt;/head&gt;&#34;&#43;
 &#34;&lt;body&gt;&#34;&#43;seuconteudo&#43;&#34;&lt;/body&gt;&#34;&#43;
 &#34;&lt;/html&gt;&#34;;
writer.println(body);</code></pre>
<p>acredito que uma dessas opções vai resolver seu problema!</p>
<p>caso contrário, pode voltar aqui e vemos mais alternativas pra atacar!</p>
<p>um abraço e bons estudos!</p> <p>cria um filter e seta o encoding para utf-8, deve resolver:</p>
<pre class="prettyprint"><code>&#64;webfilter(&#34;/*&#34;)
public class characterencodingfilter implements filter {

 &#64;override
 public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws servletexception, ioexception {
 request.setcharacterencoding(&#34;utf-8&#34;);
 chain.dofilter(request, response);
 }
}</code></pre> <p>oi nilton,</p>
<p>vc precisa mudar o caminho no <code>produtoscontroller</code> no metodo <code>gravar</code>:</p>
<pre class="prettyprint"><code>string path &#61; filesaver.write(&#34;resources/arquivos-sumario&#34;, sumario);
</code></pre><p>a pasta <code>arquivos-sumario</code> deve existir dentro da pasta <code>src/main/webapp/resources</code>:</p>
<pre class="prettyprint"><code>src/main/webapp/resources/arquivos-sumario</code></pre><p>alem disso, vc precisa ajustar o caminho na tag <code>img</code> no jsp:</p>
<pre class="prettyprint"><code> &lt;c:url value&#61;&#34;/resources&#34; var&#61;&#34;resources&#34; /&gt;

&lt;c:foreach items&#61;&#34;${produtos}&#34; var&#61;&#34;produto&#34;&gt;
 &lt;tr&gt;
 &lt;td&gt;${produto.nome}&lt;/td&gt;
 &lt;td&gt;${produto.descricao}&lt;/td&gt;
 &lt;td&gt;&lt;c:url value&#61;&#39;/${produto.sumariopath}&#39; /&gt;&lt;/td&gt;
 &lt;td&gt;&lt;img src&#61;&#34;${resources}/${produto.sumariopath}&#34;&gt;&lt;/td&gt;
 &lt;/tr&gt;
&lt;/c:foreach&gt;</code></pre><p>espero ter errado em nada!!!</p>
<p>abs</p> <p><strong> @ bowe </strong></p><p>você precisaria criar uma matriz na sua função de opções para a caixa de seleção e atribuir a ela um id como um estado padrão e atribuir o tipo de "caixa de seleção" a ela. aqui está uma amostra supondo que você já tenha o código em vigor para o painel de administração</p><pre><code>&lt;?php // set variables for the options panel $themename = "your\_theme\_name"; $themeshortname = "yt"; $mythemeoptions = array(); //the option function function cool\_theme\_options() { global $themename, $themeshortname, $mythemeoptions; $themeoptions = array ( array( "name" =&gt; \_\_('show featured content slider','your\_theme\_name'), "desc" =&gt; \_\_('when checked, the slider will be added to the home page.','your\_theme\_name'), "id" =&gt; "show\_featured\_slider", "std" =&gt; "false", "type" =&gt; "checkbox" ), ); } //the option form function my\_cool\_theme\_admin() { global $themename, $themeshortname, $themeoptions; // saved or updated message if ( $\_request['saved'] ) echo '&lt;div id="message" class="updated fade"&gt;&lt;p&gt;&lt;strong&gt;'.$themename.' settings saved.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;'; if ( $\_request['reset'] ) echo '&lt;div id="message" class="updated fade"&gt;&lt;p&gt;&lt;strong&gt;'.$themename.' settings reset.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;'; // the form ?&gt; &lt;div class="wrap"&gt; &lt;h2&gt;&lt;?php echo $themename; ?&gt; options&lt;/h2&gt; &lt;form method="post"&gt; &lt;?php wp\_nonce\_field('theme-save'); ?&gt; &lt;table class="form-table"&gt; &lt;?php foreach ($themeoptions as $value) { // output the appropriate form element switch ( $value['type'] ) { case 'text': ?&gt; &lt;tr valign="top"&gt; &lt;th scope="row"&gt;&lt;?php echo $value['name']; ?&gt;:&lt;/th&gt; &lt;td&gt; &lt;?php foreach ($value['options'] as $key=&gt;$option) { if ($key == get\_option($value['id'], $value['std']) ) { $checked = "checked=\"checked\""; } else { $checked = ""; } ?&gt; &lt;input type="radio" name="&lt;?php echo $value['id']; ?&gt;" value="&lt;?php echo $key; ?&gt;" &lt;?php echo $checked; ?&gt; /&gt;&lt;?php echo $option; ?&gt;&lt;br /&gt; &lt;?php } ?&gt; &lt;?php echo $value['desc']; ?&gt; &lt;/td&gt; &lt;/tr&gt; &lt;?php break; case "checkbox": ?&gt; &lt;tr valign="top"&gt; &lt;th scope="row"&gt;&lt;?php echo $value['name']; ?&gt;&lt;/th&gt; &lt;td&gt; &lt;?php if(get\_option($value['id'])){ $checked = "checked=\"checked\""; } else { $checked = ""; } ?&gt; &lt;input type="checkbox" name="&lt;?php echo $value['id']; ?&gt;" id="&lt;?php echo $value['id']; ?&gt;" value="true" &lt;?php echo $checked; ?&gt; /&gt; &lt;?php echo $value['desc']; ?&gt; &lt;/td&gt; &lt;/tr&gt; &lt;?php break; default: break; } } ?&gt; &lt;/table&gt; &lt;p class="submit"&gt; &lt;input name="save" type="submit" value="save changes" class="button-primary" /&gt; &lt;input type="hidden" name="action" value="save" /&gt; &lt;/p&gt; &lt;/form&gt; &lt;form method="post"&gt; &lt;?php wp\_nonce\_field('theme-reset'); ?&gt; &lt;p class="submit"&gt; &lt;input name="reset" type="submit" value="reset" /&gt; &lt;input type="hidden" name="action" value="reset" /&gt; &lt;/p&gt; &lt;/form&gt; </code></pre><p>em seguida, adicione a função em functions.php que chama o controle deslizante se a caixa estiver marcada.</p><pre><code>&lt;?php function cool\_theme\_slider\_option() { // load the custom options global $themeoptions; foreach ($themeoptions as $value) { $$value['id'] = get\_option($value['id'], $value['std']); } if ($show\_featured\_slider == 'true') { locate\_template( array( 'includes/slider.php'), true ) } } // end function add\_action('wp\_head', 'cool\_theme\_slider\_option'); ?&gt; </code></pre><p>este código não foi verificado para ter certeza de que funciona exatamente como está, mas destinado a mostrar um exemplo para usar uma opção de caixa de seleção no seu tema.</p> <p>usando <a href="http://ruby-doc.org/core-1.9.3/string.html#method-i-scan"><code>scan</code></a> deve fazer o truque:</p><pre><code>string.scan(/regex/) </code></pre> <p>alguns pensamentos:</p><ol> <li><strong>os ícones garantem confundir a maioria das pessoas quando usados ​​isoladamente</strong>. adoro completamente a maneira como os ícones do firefox têm texto quando há espaço para tê-los. portanto, tente pensar um pouco mais sobre se há alguma maneira de ter um rótulo de texto ao lado do ícone.</li> <li>quanto ao ícone, que tal três ícones de filtro sobrepostos?</li> <li>mas, dando um passo atrás, <strong>você pode dividir a tarefa em duas operações</strong> - <strong>selecionar tudo</strong> então <strong>aplicar filtros selecionados</strong>? não sei o contexto do seu trabalho, mas se você puder selecionar mais de um filtro, isso poderá funcionar bem. certamente muitos aplicativos fazem isso.</li> </ol> <p>há uma maneira de obter toda a "seção de introdução" sem qualquer análise html! semelhante à resposta de anthonys <a href="https://stackoverflow.com/a/18504997/2078664"></a> com um parâmetro <code>explaintext</code> adicional, você pode obter o texto da seção de introdução em texto simples.</p><h2>inquerir</h2><p>obtendo a introdução do stack overflow em texto simples:</p><p> <a href="https://en.wikipedia.org/w/api.php?format=json&amp;action=query&amp;prop=extracts&amp;exintro&amp;explaintext&amp;redirects=1&amp;titles=stack%20overflow">https://en.wikipedia.org/w/api.php?format=json&amp;action=query&amp;prop=extracts&amp;exintro&amp;explaintext&amp;redirects=1&amp;titles=stack%20overflow</a> </p><h3>resposta json</h3><p>(avisos despojados)</p><pre><code>{ "query": { "pages": { "21721040": { "pageid": 21721040, "ns": 0, "title": "stack overflow", "extract": "stack overflow is a privately held website, the flagship site of the stack exchange network, created in 2008 by jeff atwood and joel spolsky, as a more open alternative to earlier q&amp;a sites such as experts exchange. the name for the website was chosen by voting in april 2008 by readers of coding horror, atwood's popular programming blog.\nit features questions and answers on a wide range of topics in computer programming. the website serves as a platform for users to ask and answer questions, and, through membership and active participation, to vote questions and answers up or down and edit questions and answers in a fashion similar to a wiki or digg. users of stack overflow can earn reputation points and \"badges\"; for example, a person is awarded 10 reputation points for receiving an \"up\" vote on an answer given to a question, and can receive badges for their valued contributions, which represents a kind of gamification of the traditional q&amp;a site or forum. all user-generated content is licensed under a creative commons attribute-sharealike license. questions are closed in order to allow low quality questions to improve. jeff atwood stated in 2010 that duplicate questions are not seen as a problem but rather they constitute an advantage if such additional questions drive extra traffic to the site by multiplying relevant keyword hits in search engines.\nas of april 2014, stack overflow has over 2,700,000 registered users and more than 7,100,000 questions. based on the type of tags assigned to questions, the top eight most discussed topics on the site are: java, javascript, c#, php, android, jquery, python and html." } } } } </code></pre><p>documentação: <a href="https://en.wikipedia.org/wiki/special:apihelp/query+extracts">api: query/prop = extractos</a> </p><hr><p>edit: adicionado <code>&amp;redirects=1</code> conforme recomendado nos comentários.</p>