高级自定义字段插件新帖子中的最后一个输入字段

时间:2015-01-23 作者:George Plamenov Georgiev

我有一个问题,前端更新后+高级自定义字段插件它没有清除新的职位上的输入。它确实正确地插入或更新了表单,但当您第一次到达那里时,您会在acf插件的字段中看到最后输入的内容。我已经搜索了这个问题,并找到了一篇建议正确过滤$post\\u id的帖子,我也尝试过了。

<?php
acf_form_head(); 

if ( is_user_logged_in() ) { 
$current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'\';

if($_POST)
{
$post_information = array(
\'post_title\' =>  wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => $_POST[\'postContent\'],
\'post_type\' => \'post\',
\'post_status\' => \'pending\'
);
    if($current_post)
    {
        $post_information[\'ID\'] = $current_post;
    }
$post_id = wp_insert_post( $post_information );
$_POST[\'return\'] = add_query_arg( array(\'post\' => $post_id), $_POST[\'return\'] );
//print_r($current_post);
//exit();
}
?>
<?php get_header(); ?>
<?php
if($current_post)
    {
?>
<?php 
  $query = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => \'-1\',\'page_id\'=>$current_post ) ); ?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
    $title = get_the_title();
    $content = get_the_content()    ?>

<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
<?php }
else
{
    $title = \'\';
    $content = \'\';
}
 ?>
<main role="main">
<!-- section -->

  <section>
<form action="" id="primaryPostForm" method="POST">
  <fieldset>
    <label for="postTitle">
      <?php _e( \'Post\\\'s Title:\', \'framework\' ); ?>
    </label>
    <input type="text" name="postTitle" id="postTitle" value="<?php echo $title; ?>" class="required" />
  </fieldset>
  <?php if ( $postTitleError != \'\' ) { ?>
  <span class="error"><?php echo $postTitleError; ?></span>
  <div class="clearfix"></div>
  <?php } ?>
  <fieldset>
    <label for="postContent">
      <?php _e( \'Post\\\'s Content:\', \'framework\' ); ?>
    </label>
    <textarea name="postContent" id="postContent" rows="8" cols="30"><?php echo $content; ?></textarea>
  </fieldset>
  <fieldset>
  <?php wp_dropdown_categories(""); ?>
    <?php wp_nonce_field( \'post_nonce\', \'post_nonce_field\' ); ?>
    <input type="hidden" name="submitted" id="submitted" value="true" />
    <?php $args = array(
            /*\'post_id\' => \'new_post\',*/
            \'field_groups\' => array( 19 )
        );

        acf_form( $args );  ?>
  </fieldset>
</form>

1 个回复
最合适的回答,由SO网友:George Plamenov Georgiev 整理而成

我已经设法做到了,我试图不使用插件开发人员建议的挂钩,但解决方案是使用挂钩。

Here is 插件的文档示例

但是我也需要编辑帖子的内容,所以我会循环查找帖子,你可以创建一个查询来获取它,也可以。所以我得到的内容如下:

<?php
$current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'new\';
acf_form_head(); 
?>
<?php get_header(); ?>
<?php
    if($current_post!=\'new\')
       {
?>
<?php 
      $query = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => \'-1\', \'page_id\'=>$current_post,\'author\'=>$current_user->ID ) ); ?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
        $title = get_the_title();
        $content = get_the_content();
        $post_categories = wp_get_post_categories( get_the_ID() );
        $cats = array();

        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[] = $cat->cat_ID;
        }

?>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
<?php }
    else
    {
        $title = \'\';
        $content = \'\';
    }
?>
然后在函数中。php我有一个过滤器,可以在提交表单时获取信息,如下所示:

function my_pre_save_post( $post_id )
{   
    $current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'\';
    if($_POST[\'cat\'])
    {
        $cats = $_POST[\'cat\'];
        foreach($cats as $catp)
        {
            $catobject = get_category($catp,false); // Get the Category object by the id of current category
            if($catobject->category_parent); // the id of the parent category 
            {
                array_push($_POST[\'cat\'],$catobject->category_parent);
            }
        }
        $_POST[\'cat\']=array_unique($_POST[\'cat\']);
    }
// Create a new post
$post_information = array(
\'post_title\' =>  wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => $_POST[\'postContent\'],
\'post_type\' => \'post\',
\'post_status\' => \'pending\',
\'post_category\'=>$_POST[\'cat\']
);

if($current_post)
{
        $post_information[\'ID\'] = $current_post;
}

// insert the post
$post_id = wp_insert_post( $post_information ); 

$_POST[\'return\'] = add_query_arg( array(\'post\' => $post_id), $_POST[\'return\'] );    

// return the new ID
return $post_id;
}
此外,我还清除了选项表中以“new\\”开头的字段的一些选项,并在调用高级自定义字段可视化时添加此代码以将新帖子与旧帖子分开。

<?php $args = array(
                \'post_id\' => $current_post ,
                \'field_groups\' => array( 19 )
            );

            acf_form( $args );  ?>
这件事解决了我的问题,所以我想与经历过同样问题的人分享。

结束

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。

高级自定义字段插件新帖子中的最后一个输入字段 - 小码农CODE - 行之有效找到问题解决它

高级自定义字段插件新帖子中的最后一个输入字段

时间:2015-01-23 作者:George Plamenov Georgiev

我有一个问题,前端更新后+高级自定义字段插件它没有清除新的职位上的输入。它确实正确地插入或更新了表单,但当您第一次到达那里时,您会在acf插件的字段中看到最后输入的内容。我已经搜索了这个问题,并找到了一篇建议正确过滤$post\\u id的帖子,我也尝试过了。

<?php
acf_form_head(); 

if ( is_user_logged_in() ) { 
$current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'\';

if($_POST)
{
$post_information = array(
\'post_title\' =>  wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => $_POST[\'postContent\'],
\'post_type\' => \'post\',
\'post_status\' => \'pending\'
);
    if($current_post)
    {
        $post_information[\'ID\'] = $current_post;
    }
$post_id = wp_insert_post( $post_information );
$_POST[\'return\'] = add_query_arg( array(\'post\' => $post_id), $_POST[\'return\'] );
//print_r($current_post);
//exit();
}
?>
<?php get_header(); ?>
<?php
if($current_post)
    {
?>
<?php 
  $query = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => \'-1\',\'page_id\'=>$current_post ) ); ?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
    $title = get_the_title();
    $content = get_the_content()    ?>

<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
<?php }
else
{
    $title = \'\';
    $content = \'\';
}
 ?>
<main role="main">
<!-- section -->

  <section>
<form action="" id="primaryPostForm" method="POST">
  <fieldset>
    <label for="postTitle">
      <?php _e( \'Post\\\'s Title:\', \'framework\' ); ?>
    </label>
    <input type="text" name="postTitle" id="postTitle" value="<?php echo $title; ?>" class="required" />
  </fieldset>
  <?php if ( $postTitleError != \'\' ) { ?>
  <span class="error"><?php echo $postTitleError; ?></span>
  <div class="clearfix"></div>
  <?php } ?>
  <fieldset>
    <label for="postContent">
      <?php _e( \'Post\\\'s Content:\', \'framework\' ); ?>
    </label>
    <textarea name="postContent" id="postContent" rows="8" cols="30"><?php echo $content; ?></textarea>
  </fieldset>
  <fieldset>
  <?php wp_dropdown_categories(""); ?>
    <?php wp_nonce_field( \'post_nonce\', \'post_nonce_field\' ); ?>
    <input type="hidden" name="submitted" id="submitted" value="true" />
    <?php $args = array(
            /*\'post_id\' => \'new_post\',*/
            \'field_groups\' => array( 19 )
        );

        acf_form( $args );  ?>
  </fieldset>
</form>

1 个回复
最合适的回答,由SO网友:George Plamenov Georgiev 整理而成

我已经设法做到了,我试图不使用插件开发人员建议的挂钩,但解决方案是使用挂钩。

Here is 插件的文档示例

但是我也需要编辑帖子的内容,所以我会循环查找帖子,你可以创建一个查询来获取它,也可以。所以我得到的内容如下:

<?php
$current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'new\';
acf_form_head(); 
?>
<?php get_header(); ?>
<?php
    if($current_post!=\'new\')
       {
?>
<?php 
      $query = new WP_Query( array( \'post_type\' => \'post\', \'posts_per_page\' => \'-1\', \'page_id\'=>$current_post,\'author\'=>$current_user->ID ) ); ?>
<?php if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
<?php
        $title = get_the_title();
        $content = get_the_content();
        $post_categories = wp_get_post_categories( get_the_ID() );
        $cats = array();

        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[] = $cat->cat_ID;
        }

?>
<?php endwhile; endif; ?>
<?php wp_reset_query(); ?>
<?php }
    else
    {
        $title = \'\';
        $content = \'\';
    }
?>
然后在函数中。php我有一个过滤器,可以在提交表单时获取信息,如下所示:

function my_pre_save_post( $post_id )
{   
    $current_post = isset($_GET[\'post\'])?intval($_GET[\'post\']):\'\';
    if($_POST[\'cat\'])
    {
        $cats = $_POST[\'cat\'];
        foreach($cats as $catp)
        {
            $catobject = get_category($catp,false); // Get the Category object by the id of current category
            if($catobject->category_parent); // the id of the parent category 
            {
                array_push($_POST[\'cat\'],$catobject->category_parent);
            }
        }
        $_POST[\'cat\']=array_unique($_POST[\'cat\']);
    }
// Create a new post
$post_information = array(
\'post_title\' =>  wp_strip_all_tags( $_POST[\'postTitle\'] ),
\'post_content\' => $_POST[\'postContent\'],
\'post_type\' => \'post\',
\'post_status\' => \'pending\',
\'post_category\'=>$_POST[\'cat\']
);

if($current_post)
{
        $post_information[\'ID\'] = $current_post;
}

// insert the post
$post_id = wp_insert_post( $post_information ); 

$_POST[\'return\'] = add_query_arg( array(\'post\' => $post_id), $_POST[\'return\'] );    

// return the new ID
return $post_id;
}
此外,我还清除了选项表中以“new\\”开头的字段的一些选项,并在调用高级自定义字段可视化时添加此代码以将新帖子与旧帖子分开。

<?php $args = array(
                \'post_id\' => $current_post ,
                \'field_groups\' => array( 19 )
            );

            acf_form( $args );  ?>
这件事解决了我的问题,所以我想与经历过同样问题的人分享。

相关推荐

Front-End Post Submission

我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。