点击后动态查找帖子ID

时间:2019-06-03 作者:Kutuk

Goal: 我正在用Wordpress制作一个投资组合网站。这是我第一次自己设置Wordpress页面(我在实习时做过,但都是模板式的)。我看过这个网站,它使用(我认为的)Ajax将其内容加载到页面。因此,为了更好的练习,我想在艰苦的道路上让自己成为一名。到目前为止,通过所有的研究,我已经了解了更多关于wp\\U查询的内容,但还不足以解决这个问题。ajax.php.wordpressexplanation

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 我终于做到了,很明显,这只是两行代码,我花了不到一个星期的时间。这是一次让我学到很多东西的旅程。谢谢大家的帮助。如果有人需要代码,我会更新这个。

1 个回复
最合适的回答,由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>

相关推荐

如何为特定页面取消注册jQuery版本?

为了解决我的网站的问题,我需要通过函数包含特定的jQuery版本。php在我的主题文件夹中,但这会导致一些页面与avada公文包和其他生成器元素的兼容性问题。如何取消注册位于函数中的php脚本。5个特定页面的php?如果删除脚本,公文包和其他构建器元素就会恢复工作。我很抱歉,但我对php知之甚少。。。下面是添加到函数的代码。php:function add_jq_theme() { wp_enqueue_script( \'script-name\', \'https://ajax.google