2016-05-18 4 views
0

Ich habe ein Plugin, das Wordpress-Optionen verwendet - es speichert Daten für jede Seite und Post, markiert mit der ID, die ich am Front-End ziehen und benutzerdefinierte Daten anzeigen kann für diesen Beitrag oder diese Seite.Wordpress Optionen Tabelle Löschen aller Werte beim Speichern Teilmenge von Einträgen

Zum Beispiel kann ich benutzerdefinierte Daten für jeden der Beiträge 1-25, speichern Sie erfolgreich in Options.php, gehen Sie auf Seite 2, wo ich Post Einträge 26-50 zu sehen, und speichern Sie Daten für diese Einträge ... aber die Daten für 26-50 Speicher wischt die Daten, die ich nur auf Einträge gespeichert 1-25 und 51- x

Der Code Paginierung ich benutze ein benutzerdefinierter Code-Schnipsel:

$how_many_results = 25; 
$post_args = array('numberposts' => -1, 'posts_per_page' => $how_many_results, 'orderby' => 'title', 'order' => 'ASC', 'paged' => $paged,'post_type' => 'post') 
$posts_query = new WP_Query($post_args); 
$mnposts = $posts_query->max_num_pages; 
$big = 999999999999; 
$posts_pagination = paginate_links(array(
'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), 
'current' => max(1, $paged), 
'total' => $mnposts, 
'end_size' => 1, 
'mid_size' => 1, 
'prev_next' => True, 
'prev_text' => __('Prev','cust_dataset'), 
'next_text' => __('Next','cust_dataset'), 
'type' => 'list' 
)); 
echo (!isset($posts_pagination))?'<span>'.__('All posts displayed','cust_dataset').'</span>':$posts_pagination; 

und das ist die HTML-Formatierung:

<form method="post" action="options.php"> 
<?php 
settings_fields('cust_options_post'); 
$cust_posts = get_option('cust_settings_post'); 
$cust_name = 'cust_name_'.get_the_ID(); 
$cust_name_set = (isset($cust_posts[$cust_name]))?$cust_posts[$cust_name]:''; 
$option .= '<input type="hidden" name="cust_settings_post['.get_permalink().']" id="cust_settings_post['.get_permalink().']" value="'.$red_url.'" />'; 
$option .= '<strong>' . get_the_title() . '</strong> (<em><a href="' . get_admin_url() . 'post.php?post=' . get_the_ID() . '&action=edit">edit</a></em>)'; 
$option .= '<br />' . get_permalink() . ' (<em><a href="' . get_permalink() . '">view</a></em>)'; 
$option .= '<input type="text" name="cust_settings_post['.$cust_name.']" id="cust_settings_post['.$cust_name.']" value="'.$cust_name_set.'" />'; 
?> 
<?php echo $option; ?> 
<input type="submit" /> 
</form> 

Das Problem ist, dass die Paginierung nur 25 auf einmal zieht und Wordpress den gesamten Optionsblock auf jedem Formular erneut speichert, obwohl es eine Untermenge von nur 25 Einträgen ist. Es wäre kein Problem, wenn ich 100 Seiten hätte, aber ich führe es auf einer Seite mit mehr als 30.000 Posts aus ... und ich kann den Server nicht gleichzeitig mit der Verarbeitung von 30.000 Options-Datasets durcharbeiten.

Meine Frage ist: Wie kann ich eine Teilmenge der Daten zu options.php speichern und nicht den Rest der Daten löschen hatte ich zuvor gespeicherten dass nicht in der aktuellen Untergruppe ist?

Antwort

0

Also, nach etwas mehr Forschung werde ich meine eigene Frage für diejenigen beantworten, die folgen können.

Einstellungsfelder werden in der Wordpress-Optionstabelle als einzelner Datenbanktabelleneintrag gespeichert. Wenn Sie ein Bit der Information ändern oder speichern, oder in diesem Fall eine Teilmenge dieser Information, schreibt Wordpress den gesamten Tabelleneintrag für das Feld "Einstellungen" neu, sodass es sich bei jedem Speichern selbst überschreibt.

Die einzige Möglichkeit, den Rest Ihrer Daten in diesem Eintrag zu speichern, besteht darin, sie herauszunehmen und in einer Variablen zu speichern, die Sie dann an den geänderten Code anhängen, bevor Sie sie erneut speichern. Das Problem dabei ist jedoch, wenn Sie mit großen Datenmengen zu tun haben. In meinem Fall habe ich zusätzliche Daten für jeden von 30.000 Posts gespeichert, was eine gute Möglichkeit ist, den gesamten Speicher auf Ihrem Server zu verbrauchen, der versucht, die Datenbits für diese Seiten zu verarbeiten ... sogar wenn Sie nur sind Betrachten einer Teilmenge von 25 oder 50 Einträgen.

Dort gehen Sie.

Verwandte Themen