我正在通过我的主题函数构建一个简单的post-order“插件”。php。该函数用于更新选项中选项的值。php提交表单。因此,例如,在WP\\U查询中,当在帖子旁边的字段中输入“1”时,该帖子的ID将发送到options中的一个选项。php称为“post1”。因此,选项是“post1”,值是“1456”(post的ID)。如果在字段中输入“2”,它会将帖子的ID发送到名为“post2”的选项。我认为这是相当简单的。
在脚本的开头,我调用了所有选项
$posts1 = get_option(\'post1\');
$posts2 = get_option(\'post2\');
等等,这样
$posts1
, 和
$posts2
是帖子的ID。然后我将它们拉入一个数组,然后进入一个
WP_Query
. 这是为了让用户知道帖子的当前顺序。
下面是另一个WP_Query
这就完成了上面提到的所有魔术,根据提交表单时用户选择的数字,将帖子的ID拉到选项中。
我所期望的是,在提交表单时,如果选项发生了更改(而且它们也发生了更改,因为我每次都签入options.php),则重新加载页面时会显示上面的较新列表–如中所示,选项发生了更改。但是,第一个WP_Query
, 这就是如上所述拉入选项并将其发送到阵列,即脚本正在拉入较旧的选项。
我原以为脚本在提交后仍在运行,并且选项没有在页面加载时及时更改,所以我将sleep(10);
启动前get_option
列表,但即使在10秒钟后,旧选项仍会被拉入。
如果在原始提交和重新加载页面后立即刷新页面,则会引入新选项,而不是在原始提交和重新加载页面上。
为什么会这样,我如何修复它?是否有理由认为脚本会引入类似缓存之类的选项?
谢谢你的帮助。
重申一下,我知道get_option
调用发生在update_option
, 但是update_option
仅在提交表单时发生,因此页面将重新加载。应显示新选项,因为在update_option
发生,但它们没有。我希望“旧”选项最初出现在页面加载上,这样用户就可以看到帖子的当前顺序,可以更新帖子,提交表单,然后重新加载页面,并且应该显示他们刚刚输入的选项。
下面是代码的简化版本(我意识到这是低效和笨拙的,但我不认为这会影响当前的问题):
<?php function functionpostorderit() { ?>
<?php
/* THE FIRST LOOP BELOW IS SO USERS CAN SEE THE CURRENT POST ORDER */
global $post;
global $my_query;
$posts1 = get_option(\'post1\');
$posts2 = get_option(\'post2\');
$posts3 = get_option(\'post3\');
$post_listids = array($posts1,$posts2,$posts3);
array_filter($post_listids);
$paged_l = 1;
$posts_per_page_l = 25;
$offset = ( $paged_l - 1 ) * $posts_per_page_l;
$ids_to_query_l = array_slice( $post_listids, $offset, $posts_per_page_l );
$my_query = new WP_Query( array(\'post_type\' => array( \'post\', \'feature\' ), \'post__in\' => $ids_to_query_l, \'posts_per_page\' => $posts_per_page_l, \'orderby\' => \'post__in\', \'ignore_sticky_posts\' => 1, \'post_status\' => \'publish\') );
if($my_query->have_posts()) {
echo \'<ul>\';
$loop_counter = 0;
while ( $my_query->have_posts() ) {
$my_query->the_post();
$loop_counter++;
echo \'<li>\'.get_the_title() . \'<input type="text" name="number_of_\'.$loop_counter.\'" value="" />\'.\'</li>\' ;
}
echo \'</ul>\';
}
else {
}
wp_reset_postdata();
?>
<hr />
<form method="post" action="">
<?php
global $post;
global $my_query;
/* THE SECOND LOOP BELOW IS THE ONE IN WHICH USERS PRIMARILY UPDATE THE ORDER */
$my_query = new WP_Query( array(\'post_type\' => array( \'post\', \'feature\' ), \'posts_per_page\' => 25, \'orderby\' => \'date\', \'post_status\' => \'publish\', \'post__not_in\' => $post_listids
) );
if($my_query->have_posts()) {
echo \'<ul>\';
$loop_counter = 0;
while ( $my_query->have_posts() ) {
$my_query->the_post();
$loop_counter++;
$this_id = get_the_ID();
echo \'<li>\' . get_the_title() . \'<input type="text" name="number_of_\'.$loop_counter.\'" value="" />\'.$this_id.\'</li>\' ;
${\'id_of_\' . $loop_counter} = get_the_ID();
$current_id = get_the_ID();
${\'number_of_\' . $loop_counter} = $_POST[\'number_of_\' . $loop_counter];
$current_value_input = $_POST[\'number_of_\' . $loop_counter];
if(isset($_POST[\'submit\']))
{
$current_number_of = \'number_of_\'.$loop_counter;
if($current_value_input !== \'\') {
$checking_for_equal = array(\'number_of_1\',\'number_of_2\',\'number_of_3\');
$remove_equal = array_search(\'number_of_\'.$loop_counter, $checking_for_equal);
unset($checking_for_equal[$remove_equal]);
foreach ($checking_for_equal as &$valued) {
$valued = $_POST[$valued];
}
if (in_array(${\'number_of_\' . $loop_counter}, $checking_for_equal))
{
if ($has_run !== "true") {
echo "<div id=\'message\' class=\'error\'>Sorry, posts cannot have the same position. Try again.</div>";
$has_run = "true";
}
}
else
{
if($posts1 == $current_id) {
$option = \'post1\';
$new_value = \'\';
update_option( $option, $new_value );
}
elseif($posts2 == $current_id) {
$option = \'post2\';
$new_value = \'\';
update_option( $option, $new_value );
}
elseif($posts3 == $current_id) {
$option = \'post3\';
$new_value = \'\';
update_option( $option, $new_value );
}
else {
}
$option = \'post\'.${\'number_of_\' . $loop_counter};
$new_value = ${\'id_of_\' . $loop_counter};
update_option( $option, $new_value );
}
}
}
}
echo \'</ul>\';
} else {
}
wp_reset_postdata();
?>
<p><input class="submitter" type="submit" name="submit" value="Update" /></p>
</form>
<?php
}
?>