建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

如何通过自定义字段重新排序WordPress文章(WordPress如何添加自定义小工具)

GG网络技术分享 2025-03-18 16:13 0


如何通过自定义字段重新排序WordPress文章

在编辑文章页面右侧边栏的发布元框中创建一个数字自定义字段。字段值将保存在postmeta表中,我们稍后将使用它来更改文章顺序。

有关发布元框中的自定义字段,请参阅下面的代码。

add_action('post_submitbox_misc_actions','add_publish_meta_custom_field');functionadd_publish_meta_custom_field($post_obj){

global$post;

$post_type='post';

$value=get_post_meta($post_obj->ID,'post_order',true);

$val=($value)?$value:"0";

if($post_type==$post->post_type){

echo'<DIVCLASS="MISC-PUB-SECTIONMISC-PUB-SECTION-LAST">'

.'PostOrder<INPUTNAME="POST_ORDER"TYPE="NUMBER"STEP="1"MIN="0"ID="POST_ORDER"VALUE="'.$VAL.'"CLASS="SMALL-TEXT">'

.'

';

}}

以上将在发布元框中创建自定义字段,您将看到如下图所示的字段。


发布元框中的自定义字段

保存自定义字段的值

现在,我们必须保存PostOrder字段的值。所以我们将save_post在保存文章之前运行动作钩子,并update_post_meta()用于保存相应文章的字段值。

update_post_meta()操作将值与文章ID一起保存在wp_postmeta表中。

好的。请参阅代码以保存该自定义字段的值。

add_action('save_post','save_publish_meta_custom_field',10,3);functionsave_publish_meta_custom_field($post_id,$post,$update){

$post_type='post';

if($post_type!=$post->post_type){

return;

}

if(wp_is_post_revision($post_id)){

return;

}

if(isset($_POST['post_order'])){

update_post_meta($post_id,'post_order',$_POST['post_order']);

}

}

上面的代码将自定义字段值保存在数据库中,并将显示在该输入数字字段中。

自定义字段中保存的值

按自定义字段更改WordPress文章的顺序

现在,我们将使用我们自己的顺序值更改WordPress文章的默认顺序。在显示结果之前,我们将运行pre_get_posts动作钩子来修改现有的WP_Query文章。

pre_get_posts给我们一些解决方案来修改wp_query无需编写自定义WP_Query。

functionpre_custom_post_order_sort($query){

if(is_home()&&$query->is_main_query()){

$query->set('orderby','meta_value');

$query->set('meta_key','post_order');

$query->set('order','ASC');

}}add_action('pre_get_posts','pre_custom_post_order_sort');

上面的代码示例将更改博客页面或主页上的WordPress文章顺序。

我们在这篇文章中检查了一个主要查询和主页,然后使用meta_key元值设置查询顺序。它将检查文章是否具有自定义字段值,并根据字段值将它们置于顶部。

在模板文件中按自定义字段排序WordPress文章

您还可以创建自己的自定义WP_Query以按顺序显示文章。

您必须创建一个WordPress自定义模板页面,然后您可以在该模板中编写自己的查询。

在此处查看有关如何在WordPress中创建自定义页面模板的分步指南。

好的。您现在有一个自定义模板文件。因此,在该模板中编写以下代码。

$args=array(

'post_type'=>'post',

'meta_key'=>'post_order',

'orderby'=>'meta_value',

'order'=>'ASC');

$query=newWP_query($args);

if($query->have_posts()){

while($query->have_posts()){

$query->the_post();

if(!empty(get_post_meta($post->ID,'post_order',true))){

the_title();

}

wp_reset_postdata();}

上面的代码将按自定义字段值显示文章标题顺序,并根据自定义字段值将文章置于顶部。

您还可以在functions.php文件中创建上述代码的简码,并在小工具、页面或您想要显示文章的任何地方使用该简码。

就是这样。您已完成按自定义字段值显示WordPress文章顺序。

WordPress如何添加自定义小工具

今天给大家带来一篇WordPress添加一个自定义小工具的教程,之前wp自学笔记分享了WordPress屏蔽后台自带默认小工具,没有印象的朋友可以看看

创建小工具

创建一个小工具,需要使用 register_widget() 函数挂载一个继承于 WP_Widget 类的类,下边是一个简单的例子,创建了一个随机文章小工具。

注意,register_widget() 函数需要在 widgets_init 钩子上调用。

class widget_tags extends WP_Widget{

//添加小工具

function __construct(){

$this->WP_Widget( \'random_posts\', __( \'随机文章\', \'Bing\' ), array( \'description\' => __( \'显示几篇随机文章\', \'Bing\' ) ) );

}

//小工具内容

function widget( $args, $instance ){

//导入当前侧边栏设置

extract( $args, EXTR_SKIP );

//输出小工具前代码

echo $before_widget;

//输出小工具标题

echo $before_title . \'随机文章\' .

$after_title;

//随机文章 query_posts( \'orderby=rand&showposts=10\' );

if( have_posts() ): echo \'<ul>\';

while( have_posts() ): the_post();

printf(get_the_title());

endwhile;

echo \'</ul>\';

endif;

//输出小工具后代码

echo $after_widget;

}

}

function Bing_add_widget_tags(){

register_widget( \'widget_tags\' );

}

add_action( \'widgets_init\', \'Bing_add_widget_tags\' );

这样,后台就会出现了一个随机文章小工具,拖动到侧边栏上,会在前台显示十篇随机文章。

小工具设置

但我们会发现这个小工具并没有设置选项,那如何给这个小工具添加设置选项呢?设置选项涉及类的两个函数,update()(更新小工具设置时的处理函数)和 form()(设置表单)。

下边的代码添加了一个标题设置和显示文章数量的设置:

class widget_tags extends WP_Widget{     //添加小工具    function __construct(){        $this->WP_Widget( \\\'random_posts\\\', __( \\\'随机文章\\\', \\\'Bing\\\' ), array( \\\'description\\\' => __( \\\'显示几篇随机文章\\\', \\\'Bing\\\' ) ) );    }     //小工具内容    function widget( $args, $instance ){         //导入当前侧边栏设置        extract( $args, EXTR_SKIP );         //输出小工具前代码        echo $before_widget;             //输出小工具标题            echo $before_title . \\\'随机文章\\\' . $after_title;             //随机文章            query_posts( \\\'orderby=rand&showposts=10\\\' );            if( have_posts() ):                echo \\\'<ul>\\\';                    while( have_posts() ):                        the_post();                        printf( \\\'<li><a href=\\\"{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s\\\" title=\\\"{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s\\\">{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s</a></li>\\\', get_permalink(), get_the_title(), get_the_title() );                    endwhile;                echo \\\'</ul>\\\';            endif;         //输出小工具后代码        echo $after_widget;    }     //更新选项    function update( $instance, $old_instance ){        $instance[\\\'title\\\'] = strip_tags( $instance[\\\'title\\\'] );        $instance[\\\'number\\\'] = (int) strip_tags( $instance[\\\'number\\\'] );        return $instance;    }     //选项表单    function form( $instance ){         //添加默认设置        $instance = wp_parse_args( $instance, array(            \\\'title\\\' => __( \\\'随机文章\\\', \\\'Bing\\\' ),            \\\'number\\\' => 10        ) );         //设置表单?>        <p>            <label for=\\\"<?php echo $this->get_field_id( \\\'title\\\' ); ?>\\\"><?php _e( \\\'标题\\\', \\\'Bing\\\' ); ?>:</label>            <input  id=\\\"<?php echo $this->get_field_id( \\\'title\\\' ); ?>\\\" name=\\\"<?php echo $this->get_field_name( \\\'title\\\' ); ?>\\\" type=\\\"text\\\" value=\\\"<?php echo $instance[\\\'title\\\']; ?>\\\" />        </p>        <p>            <label for=\\\"<?php echo $this->get_field_id( \\\'number\\\' ); ?>\\\"><?php _e( \\\'文章数量\\\', \\\'Bing\\\' ); ?>:</label>            <input  id=\\\"<?php echo $this->get_field_id( \\\'number\\\' ); ?>\\\" name=\\\"<?php echo $this->get_field_name( \\\'number\\\' ); ?>\\\" type=\\\"number\\\" value=\\\"<?php echo $instance[\\\'number\\\']; ?>\\\" />        </p><?php    } }function Bing_add_widget_tags(){    register_widget( \\\'widget_tags\\\' );}add_action( \\\'widgets_init\\\', \\\'Bing_add_widget_tags\\\' );

这样再展开小工具,就能看到设置了:

然后,在生成小工具内容的时候使用选项,就能达到用户自定义的效果。

class widget_tags extends WP_Widget{     //添加小工具    function __construct(){        $this->WP_Widget( \\\'random_posts\\\', __( \\\'随机文章\\\', \\\'Bing\\\' ), array( \\\'description\\\' => __( \\\'显示几篇随机文章\\\', \\\'Bing\\\' ) ) );    }     //小工具内容    function widget( $args, $instance ){         //导入当前侧边栏设置        extract( $args, EXTR_SKIP );         //添加小工具标题过滤器        $title = apply_filters( \\\'widget_name\\\', $instance[\\\'title\\\'] );         //输出小工具前代码        echo $before_widget;             //输出小工具标题            echo $before_title . $title . $after_title;             //随机文章            query_posts( \\\'orderby=rand&showposts=\\\' . $instance[\\\'number\\\'] );            if( have_posts() ):                echo \\\'<ul>\\\';                    while( have_posts() ):                        the_post();                        printf( \\\'<li><a href=\\\"{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s\\\" title=\\\"{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s\\\">{5cc1b29162d549a8071384de182cc9fc6e6a0fd85e7907f22fd9e18cff4269c3}s</a></li>\\\', get_permalink(), get_the_title(), get_the_title() );                    endwhile;                echo \\\'</ul>\\\';            endif;         //输出小工具后代码        echo $after_widget;    }     //更新选项    function update( $instance, $old_instance ){        $instance[\\\'title\\\'] = strip_tags( $instance[\\\'title\\\'] );        $instance[\\\'number\\\'] = (int) strip_tags( $instance[\\\'number\\\'] );        return $instance;    }     //选项表单    function form( $instance ){         //添加默认设置        $instance = wp_parse_args( $instance, array(            \\\'title\\\' => __( \\\'随机文章\\\', \\\'Bing\\\' ),            \\\'number\\\' => 10        ) );         //设置表单?>        <p>            <label for=\\\"<?php echo $this->get_field_id( \\\'title\\\' ); ?>\\\"><?php _e( \\\'标题\\\', \\\'Bing\\\' ); ?>:</label>            <input  id=\\\"<?php echo $this->get_field_id( \\\'title\\\' ); ?>\\\" name=\\\"<?php echo $this->get_field_name( \\\'title\\\' ); ?>\\\" type=\\\"text\\\" value=\\\"<?php echo $instance[\\\'title\\\']; ?>\\\" />        </p>        <p>            <label for=\\\"<?php echo $this->get_field_id( \\\'number\\\' ); ?>\\\"><?php _e( \\\'文章数量\\\', \\\'Bing\\\' ); ?>:</label>            <input  id=\\\"<?php echo $this->get_field_id( \\\'number\\\' ); ?>\\\" name=\\\"<?php echo $this->get_field_name( \\\'number\\\' ); ?>\\\" type=\\\"number\\\" value=\\\"<?php echo $instance[\\\'number\\\']; ?>\\\" />        </p><?php    } }function Bing_add_widget_tags(){    register_widget( \\\'widget_tags\\\' );}add_action( \\\'widgets_init\\\', \\\'Bing_add_widget_tags\\\' );

文章到这里就已经完成了WordPress如何添加自定义小工具的全部教程了,希望对你有些帮助。

标签:

提交需求或反馈

Demand feedback