Impedisci a WordPress di aggiungere automaticamente tag per pubblicare contenuti


26

C'è un modo per impedire a WordPress di inserire automaticamente i <br>tag quando si aggiungono ritorni nell'editor di testo di WordPress.

Vorrei che si comportasse più come un editor di codice in cui posso strutturare il codice come mi piace e renderlo facile da leggere.

Il codice che sto usando nell'editor è:

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]

Vorrei strutturarlo in questo modo, quindi è più facile da leggere e modificare:

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

Tuttavia, quando lo farai ci saranno <br>tag invisibili aggiunti al contenuto del post che rovineranno il layout della mia pagina.


Vuoi rimuovere i tag ovunque , o solo per quei codici brevi?
karité il

Si prega di vedere la mia risposta qui: wordpress.stackexchange.com/questions/55782/…
Chiedo

Risposte:


25

La risposta di shea non è l'ideale come in molti casi:

  • Non vuoi <br>, <p>rimuovere tutto da ecc. Lo vuoi come comportamento predefinito per il tuo compositore visivo WP che il codice sopra cancellerà
  • In molti casi è considerato "l'hacking del core" poiché questo sta cambiando il comportamento di base predefinito di WP - ad esempio una cosa del genere non passerà su ThemeForest

Come posso vedere, hai principalmente problemi con i tuoi codici brevi. Il modo giusto di affrontare questo problema non è cambiare il comportamento predefinito (hackerare il core) ma semplicemente filtrare il contenuto. Quindi aggiungi un filtro e in una variabile passa un array dei tuoi shotrcodes che vuoi filtrare in questo modo:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");

Il contenuto all'interno verrà filtrato e pertanto i codici brevi saranno privi di <br>, <p>ecc. Ma le altre parti del contenuto, ad esempio il testo standard nell'editor WP creato dall'utente, avranno comunque la piena funzionalità di WP.

Riferimenti:

  1. the_content filtro WP
  2. "Traduttore" Regex
  3. unisciti alla funzione PHP
  4. preg_replace funzione PHP

Ha funzionato perfettamente nel mio progetto. Fantastico, eccezionale, meraviglioso, geniale ..... Tanto eccellente!
arefin2k,

@Borek È fantastico e sembra funzionare davvero bene (+1), ma per migliorare la tua risposta potresti spiegare COSA sta facendo? Dall'aspetto delle cose, sta rimuovendo <p>e <br>tag da vicino one_third e team_membershortcode, ma non sono esattamente sicuro (le mie abilità REGEX non sono assolutamente all'altezza). Puoi delineare ciò che fa per noi e ora possiamo configurarlo per altri codici brevi?
Ken

@dKen Sta facendo esattamente quello che hai scritto. A parte regex è davvero semplice in quanto il contenuto è scritto da un filtro WP incorporato the_content. Dobbiamo solo fornire il contenuto da filtrare tramite la funzione in cui specifichiamo cosa (bloccare) e come (rep) filtrare. Ho aggiunto riferimenti in modo da comprenderlo meglio controllando ogni funzione e filtro. Per quanto riguarda l'aggiunta di altri codici brevi, è sufficiente espandere l'array $ block semplicemente aggiungendo i nomi dei codici brevi come questojoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek,

... ha detto lo sviluppatore professionista, ben fatto. Upvoting.
fusion27

Cordiali saluti, questo funziona solo quando la pagina viene visualizzata. Tuttavia, nel tuo editor potresti ancora vedere <p> e quelli di <br> indesiderati come al solito.
MarsAndBack

13

La wpautop()funzione aggiunge <p>e <br>tag ai tuoi contenuti per preservare le interruzioni di riga. Se preferisci aggiungere questi tag tu stesso, puoi rimuovere i filtri che applicano questa funzione al contenuto del post:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

Se desideri mantenere la creazione automatica di paragaraph (inserimento di <p>tag) e rimuovere semplicemente i <br>tag aggiuntivi , puoi invece utilizzare questo codice:

remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( 'the_content', 'wpse_wpautop_nobr' );
add_filter( 'the_excerpt', 'wpse_wpautop_nobr' );

Vedi questo link se non sei sicuro di dove inserire questo codice.


3

Installa il plug-in "Don't Muck My Markup".

Aggiunge un'opzione di spunta ad ogni pagina disabilitando l'inserimento automatico di <p>e <br>tag.

C'è anche un'opzione per farlo in tutto il sito.


1

Probabilmente è l'editor di testo che fa casino. Questo è quello che ho fatto:

Uso TinyMCE. Sotto le impostazioni per l'editor di testo, deselezionavo "Smetti di rimuovere i tag" <p> "e" <br /> "quando li salvi e li mostri nell'editor HTML". Ha funzionato per me.


0

Forse potresti semplicemente usare do_shortcode()se tutto ciò che hai nei tuoi contenuti sono codici brevi, a condizione che tu non abbia altri contenuti che richiedono i filtri.

Non conosco il contesto, ma se sei nel ciclo:

echo do_shortcode($post->post_content);


0

La risposta di Borek non ha funzionato per il mio caso d'uso, che sta scrivendo HTML non elaborato.

Per questo ho usato il plug-in Snippet di codice (consente di aggiungere facilmente frammenti di PHP arbitrari che vengono eseguiti) per creare uno snippet per uno [html][/html]shortcode. La cosa interessante di questo shortcode è che è compatibile con il plug -in toggle-wpautop che ti consente di disabilitare l'inserimento automatico <br>e i <p>tag di un intero post. Puoi usare, mescolare e abbinare.

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = '';
  $pieces = preg_split('/(\[html\].*?\[\/html\])/is', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don't interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), '_lp_disable_wpautop', true);
  foreach ($pieces as $piece) {
    if (preg_match( '/\[html\](.*?)\[\/html\]/is', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won't do it for us
  if (!$autop_disabled) {
    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter('the_content', 'html_shorttag_filter', 9);
add_filter('the_excerpt', 'html_shorttag_filter', 9);

0

Questa funzione rimuove solo il tag <p>e <br>per lo shortcode.

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    '<p>['    => '[',
    ']</p>'   => ']',
    ']<br />' => ']'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter('the_content', 'bnd_fix_shortcodes_extra_line_break');

Colpisce anche tutti i casi in cui [e non] sono utilizzati come parte di una chiamata allo shortcode.
fuxia

0

per chi non ha familiarità con l'hacking del codice o non desidera utilizzare il plug-in, è possibile farlo.

1) copia tutto il codice corrente dalle pagine WP (editor di testo) inserisci qui la descrizione dell'immagine

2) quindi incollare nel blocco note e continuare richiedere modifica (aggiungere codice funzione, codice html o codice css)

3) Copia incolla dal blocco note allo stesso ghiaione sulle pagine WP (editor di testo)

4) Premi il pulsante [AGGIORNA] che si trova sul lato destro delle stesse pagine WP per pubblicare le pagine

inserisci qui la descrizione dell'immagine

5) Finalmente l'anteprima sul sito live

Il trucco qui non è tornare a [editor visivo] per queste pagine particolari, quindi non accadrà più automaticamente l'aggiunta automatica per [p] o [br].


-3

Una soluzione molto semplice: non utilizzare nuove righe nell'editor di wordpress. Sì, le nuove linee chiariscono. Tuttavia, in questo caso nessuna interruzione può essere ancora accettabilmente comprensibile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.