Goal: 我正在用Wordpress制作一个投资组合网站。这是我第一次自己设置Wordpress页面(我在实习时做过,但都是模板式的)。我看过这个网站,它使用(我认为的)Ajax将其内容加载到页面。因此,为了更好的练习,我想在艰苦的道路上让自己成为一名。到目前为止,通过所有的研究,我已经了解了更多关于wp\\U查询的内容,但还不足以解决这个问题。
Problem:(在我发布这篇文章之前,我已经更改了我的代码,以便它可以再次有所不同)我是ajax的新手,因为这是我第一次尝试它。我收集了谷歌的所有信息,并试图将其与我的代码和逻辑混为一谈。我现在有点明白了,但我真的不知道如何才能让它专注于我点击的帖子ID。如果我现在点击其中一篇文章,如果我点击了,它将检索所有链接the_permalink()
. I want the function to know which post it is clicking on so I can put the right content into the text-area in my html. 我尝试过使用Jquery获取url并将其转换为ID的方法,但这需要再次使用PHP。我知道你可以搜索每页的帖子ID,但那会硬编码吗?我希望它是动态的,所以如果我创建了一个新页面,它就不需要我通过编辑器分配ID。我现在真的很困惑。自2019年6月29日(欧洲)起,我一直在尝试这样做。
这是我的Ajax代码。我的网站是live onkutuk.nl.如果你需要更多的代码,请告诉我,对不起,英语不是我的母语。
ajax分页。js公司
(function($) {
$(document).on( \'click\', \'.nav-link\', function( event ) {
event.preventDefault();
var event = $(this).attr(\'href\');
$.ajax({
url: ajaxpagination.ajaxurl,
type: \'POST\',
data: {
action: \'ajax_pagination\',
},
success: function(data) {
history.pushState(null, null, event);
$( \'.text-zone\' ).html( data );
}
});
});
})(jQuery);
功能。php
add_action( \'wp_ajax_nopriv_ajax_pagination\', \'my_ajax_pagination\' );
add_action( \'wp_ajax_ajax_pagination\', \'my_ajax_pagination\' );
function my_ajax_pagination()
{
$query_vars = json_decode( stripslashes( $_POST[\'query_vars\'] ), true );
$query_vars[\'paged\'] = $_POST[\'page\'];
$posts = new WP_Query( $query_vars );
$GLOBALS[\'wp_query\'] = $posts;
if( $posts->have_posts() ) :
while( $posts->have_posts() ):
$posts->the_post(); ?>
<h2>
<?php
the_permalink();
?>
</h2>
<?php endwhile;
wp_reset_query();
wp_reset_postdata();
endif;
wp_die();
}
本地化脚本
wp_localize_script( \'ajax-pagination\', \'ajaxpagination\', array(
\'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
\'query_vars\' => json_encode( $wp_query->query ),
));
注意-我知道我没有在localize\\u脚本中使用query\\u vars,但我现在太困惑了。这种分页可能不是我想要的最好的命名方式(它来自一个教程网站)。
UPDATE 14:40 04/06/2019 = 我找到了一种返回ID的方法$post_id = isset( $_POST[\'post_id\'] ) ? $_POST[\'post_id\'] : \'N/A\';
并提供AJAX数据post_id: post_id
. 但现在的问题是它给了我一个数组array(1) { ["postId"]=> string(2) "22" }
.
UPDATE 15:37 04/06/2019 = 成功了我只留下了号码,$post_id = isset($_POST[\'post_id\']) ? $_POST[\'post_id\'] : \'N/A\';
echo $post_id["postId"];
UPDATE 16:01 04/06/2019 我终于做到了,很明显,这只是两行代码,我花了不到一个星期的时间。这是一次让我学到很多东西的旅程。谢谢大家的帮助。如果有人需要代码,我会更新这个。
最合适的回答,由SO网友:MikeNGarrett 整理而成
您希望实现的并不是真正的分页。一开始这让我很反感。您正在构建一个站点范围的导航。
如果是这种情况,您可以从url中捕获ID(这不是很有效),也可以将ID添加到标记中。
此示例显示如何将ID作为数据属性添加到菜单的定位标记上:
function my_nav_menu_link_attributes( $atts, $item, $args ) {
// Replace with the theme location name for your menu.
if ( \'menu-1\' === $args->theme_location ) {
// This works for posts or pages. Add extra custom post types to include.
if ( isset( $item->object_id ) && ( \'post\' === $item->object || \'page\' === $item->object ) ) {
$atts[\'data-post-id\'] = $item->object_id;
}
}
return $atts;
}
add_filter( \'nav_menu_link_attributes\', \'my_nav_menu_link_attributes\', 10, 3 );
如果使用此选项,则可以获取数据属性
data-post-id
对于单击的每个链接。
标记将如下所示:
<li id="menu-item-52" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-52"><a href="/sample-page/" data-post-id="2">Sample Page</a></li>